PyN*_*bie 10 html python parsing lxml
还在学习lxml.我发现有时候我无法使用item.text从树中获取项目的文本.如果我使用item.text_content()我很高兴.我不确定我明白为什么.任何提示将不胜感激
好吧,我不确定如何在不让你处理文件的情况下提供一个例子:
这里是我编写的一些代码,试图弄清楚为什么我没有得到一些我期望的文本:
theTree=html.fromstring(open(notmatched[0]).read())
text=[]
text_content=[]
notText=[]
hasText=[]
for each in theTree.iter():
if each.text:
text.append(each.text)
hasText.append(each) # list of elements that has text each.text is true
text_content.append(each.text_content()) #the text for all elements
if each not in hasText:
notText.append(each)
Run Code Online (Sandbox Code Playgroud)
所以在我运行之后,我看一下
>>> len(notText)
3612
>>> notText[40]
<Element b at 26ab650>
>>> notText[40].text_content()
'(I.R.S. Employer'
>>> notText[40].text
Run Code Online (Sandbox Code Playgroud)
unu*_*tbu 11
Accordng到的文档的text_content方法:
返回元素的文本内容,包括其子元素的文本内容,没有标记.
所以,例如,
import lxml.html as lh
data = """<a><b><c>blah</c></b></a>"""
doc = lh.fromstring(data)
print(doc)
# <Element a at b76eb83c>
Run Code Online (Sandbox Code Playgroud)
doc是的Element a.该a标签没有文本紧随其后(之间<a>和<b>左右.doc.text是None:
print(doc.text)
# None
Run Code Online (Sandbox Code Playgroud)
但c标签后面有文字,所以doc.text_content()不是None:
print(doc.text_content())
# blah
Run Code Online (Sandbox Code Playgroud)
PS.还有的意义明确的说明text属性在这里.虽然它是文档的一部分,但lxml.etree.Element我认为text和tail属性的含义同样适用于lxml.html.Element对象.
您可能会混淆实现的不同且不兼容的接口lxml- 这些lxml.etree项目具有.text属性,而(例如)来自lxml.html的项目实现该text_content方法(以及来自BeautifulSoup 的项目,也包含在 中lxml,具有.string属性......有时[[仅具有单个子节点的节点,该子节点是一个字符串...]])。
是的,选择既实现自己的接口又模拟或包含其他库本质上是令人困惑的,但它可以很方便......;-)。lxml