Python 解析html时,为什么有时需要item.text而有时需要item.text\u content()呢

Python 解析html时,为什么有时需要item.text而有时需要item.text\u content()呢,python,html,parsing,lxml,Python,Html,Parsing,Lxml,仍在学习lxml。我发现有时我无法使用item.text从树中获取项的文本。如果我使用item.text\u content(),我就可以开始了。我还不知道为什么。如有任何提示,将不胜感激 好的,我不确定如何在不让您处理文件的情况下提供示例: 以下是我编写的一些代码,试图找出我没有收到预期文本的原因: theTree=html.fromstring(open(notmatched[0]).read()) text=[] text_content=[] notText=[] hasText=[]

仍在学习lxml。我发现有时我无法使用item.text从树中获取项的文本。如果我使用item.text\u 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)
所以在我运行这个之后,我看

>>> len(notText)
3612
>>> notText[40]
<Element b at 26ab650>
>>> notText[40].text_content()
'(I.R.S. Employer'
>>> notText[40].text
>>len(非文本)
3612
>>>notText[40]
>>>notText[40]。文本内容()
(I.R.S.雇主)
>>>notText[40]。文本

您可能会混淆
lxml
实现的不同且不兼容的接口--
lxml.etree
项具有
.text
属性,而(例如)那些来自
text\u content
方法的项则实现了
(也包括在
lxml
中的节点具有
.string
属性…有时[[仅具有单个子节点的节点是字符串…])

是的,
lxml
既选择实现自己的接口,又选择模拟或包含其他库,这本身就令人困惑,但这可能很方便…;-)。
text\u content
方法:

返回元素的文本内容,包括 它的子对象,没有标记

那么比如说,

import lxml.html as lh
data = """<a><b><c>blah</c></b></a>"""
doc = lh.fromstring(data)
print(doc)
# <Element a at b76eb83c>
但是
c
标记后面有文本,因此
doc.text\u content()
不是
None

print(doc.text)
# None
print(doc.text_content())
# blah

注:
text
属性的含义有一个清晰的描述。虽然它是
lxml.etree.Element
文档的一部分,但我认为
text
tail
属性的含义同样适用于
lxml.html.Element
对象。

提供一些示例将有助于回答您的问题你的问题。我做了一些修改,我使用了lxml.html interface.text或.text\u content()返回文本字符串,如何获得html源代码而不是仅获取文本字符串?