Python 解析html时,为什么有时需要item.text而有时需要item.text\u content()呢
仍在学习lxml。我发现有时我无法使用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=[]
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源代码而不是仅获取文本字符串?