Python xpath<;p>;内部<;h3>;空的

Python xpath<;p>;内部<;h3>;空的,python,python-3.x,xpath,lxml,Python,Python 3.x,Xpath,Lxml,我开始在python3中使用xpath,现在面临这种行为。我觉得这很不对。为什么它与跨度文本匹配,而与h3内的p文本不匹配 >>> from lxml import etree >>> result = "<h3><p>Hallo</p></h3>" >>> tree = etree.HTML(result) >>> r = tree.xpath('//h3//text()'

我开始在python3中使用xpath,现在面临这种行为。我觉得这很不对。为什么它与跨度文本匹配,而与h3内的p文本不匹配

>>> from lxml import etree

>>> result = "<h3><p>Hallo</p></h3>"
>>> tree = etree.HTML(result)
>>> r = tree.xpath('//h3//text()')
>>> print(r)
[]

>>> result = "<h3><span>Hallo</span></h3>"
>>> tree = etree.HTML(result)
>>> r = tree.xpath('//h3//text()')
>>> print(r)
['Hallo']
来自lxml导入etree的
>>
>>>result=“你好

” >>>tree=etree.HTML(结果) >>>r=tree.xpath(“//h3//text()”) >>>印刷品(r) [] >>>结果=“你好” >>>tree=etree.HTML(结果) >>>r=tree.xpath(“//h3//text()”) >>>印刷品(r) [你好]

非常感谢

您的第一个XPath没有正确返回任何结果,因为相应的
树中的
不包含任何文本节点。您可以使用
tostring()
方法查看树的实际内容:

>>> result = "<h3><p>Hallo</p></h3>"
>>> tree = etree.HTML(result)
>>> etree.tostring(tree)
'<html><body><h3/><p>Hallo</p></body></html>'

有没有办法解决这个问题?我正在抓取网站,很多网站都使用这种语法。我可以改变它读取html的方式吗?另外:我可以把div元素放在h3里面,虽然div不是一个“语法内容”元素。谢谢!那有帮助!
>>> from lxml.html import soupparser
>>> result = "<h3><p>Hallo</p></h3>"
>>> tree = soupparser.fromstring(result)
>>> etree.tostring(tree)
'<html><h3><p>Hallo</p></h3></html>'