Python Can';使用html时,请不要按预期提取结果

Python Can';使用html时,请不要按预期提取结果,python,python-3.x,pyquery,python-requests-html,Python,Python 3.x,Pyquery,Python Requests Html,我无法使用html提取正确的结果: >>> from requests_html import HTMLSession >>> session = HTMLSession() >>> r = session.get('https://www.amazon.com/dp/B07569DYGN') >>> r.html.find("#productDetails_detailBullets_sections1") [] 我可以

我无法使用html提取正确的结果:

>>> from requests_html import HTMLSession
>>> session = HTMLSession()
>>> r = session.get('https://www.amazon.com/dp/B07569DYGN')
>>> r.html.find("#productDetails_detailBullets_sections1")
[]
我可以在源内容中找到
id
“productDetails\u detailBullets\u sections1”:

>>> """<table id="productDetails_detailBullets_sections1" class="a-keyvalue prodDetTable" role="presentation">""" in r.text
True
r.text中的“
>”
真的
实际上,PyQuery中也存在类似的问题

为什么
requests\u html
找不到这个元素?

我在搜索
#comparison\u price\u row
,它仍然找到了一些东西。源代码中的下一个id是
comparison\u shipping\u info\u行
,但搜索
\comparison\u shipping\u info\u行
将返回一个空数组。这两个元素位于同一级别(同一父级)。我检查了两者之间的所有来源,但没有发现任何问题

起初

然后我看到在这两者之间有一个NUL字节,这可能会使库出错

从输入中删除NUL字节后,可以找到所需的元素:

r2 = requests_html.HTML(html=r.text.replace('\0', ''))
r2.find('#productDetails_detailBullets_sections1')

[<Element 'table' role='presentation' class=('a-keyvalue', 'prodDetTable') id='productDetails_detailBullets_sections1'>]
r2=requests\u html.html(html=r.text.replace('\0','')
r2.查找(“#产品详细信息_details项目符号_sections1”)
[]

我可以确认源代码中包含
r.html。find('table')
也找不到该对象,似乎
PQuery()
对这里的某些内容不满意。@MartijnPieters是的,它只提取了四个表。PQuery库只是将CSS选择器转换为
的后代或自身::*[@id='productDetails\u detailbollets\u sections1']
XPath表达式,这是有效的。所以现在这是lxml;
r.html.pq[0]。XPath(“后代或自::表”)
实际上只返回4个元素。
PyQuery(r.html.html,parser='html5')('productDetails\u detailbollets\u sections1'))
找到元素。很好的发现。如果我正确阅读了规范,html文档中的空字符应该会导致解析错误。因此,问题出在amazon上,而不是lxml解析器。是的,好吧,我们都知道今天典型html中的错误率有多高;-)所以问题总是:解析器在理解其含义方面有多好其中一个错误。我想忽略NUL字节是比较容易的任务之一。@Alfe干得不错,但这不能从根本上解决问题,只能解决这个问题,对吗?:(谢谢你的出色工作。@赵阳旭这个问题有两个方面:① 服务器返回带有NUL的HTML(不应该返回),并且② 解析器在NUL处中止(这只是因为①). 最主要的是了解正在发生的事情,以便更好地预测类似的问题及其症状。另一件事是解决手头的具体问题。当然,它并不能解决所有类似的问题(如其他损坏的HTML或类似的问题),但至少是这个问题。