我正在通过Chrome开发工具检查页面,并在页面上显示元素的xpath。我故意禁用javascript,因此DOM不会被更改。但是,xpath I Chrome在scrapy中为元素提供了[]
,当然,元素存在。可能是什么问题?
特别是此http://cheaptool.ru/product/sadovyj-pylesos-billy-goat-lb351/的xpath //*[@id="prddeatailed_container"]/table[1]/tbody/tr[1]/td/div/table/tbody/tr[2]/td[1]/span
- 价格29 990。
$ scrapy shell 'http://cheaptool.ru/product/sadovyj-pylesos-billy-goat-lb351'
In [2]: xp1 = '//*[@id="prddeatailed_container"]/table[1]/tbody/tr[1]/td/div/table/tbody/tr[2]/td[1]/span'
In [3]: aaa = response.xpath(xp1)
In [4]: aaa
Out[4]: []
更新 原来在结果html中没有tbody。为什么Chrome会在xpath中显示它?如何使它成为xpath中真正的html?
答案 0 :(得分:2)
“我故意禁用javascript,因此DOM不会被更改”
除了javascript之外,DOM也可以被更改,因为浏览器通常具有修复html源的算法,以便浏览器可以很好地呈现它。
“@ user3616725,问题不是用什么,但为什么不用呢”
常见的情况与您在撰写此答案时发现的情况一样,Chrome会自动添加<tbody>
标记。有关此行为的说明,请参阅以下讨论:
“原来结果是html没有tbody。为什么Chrome在xpath中显示它?如何使它成为xpath中真正的html?”
Chrome呈现的html结果确实为<tbody>
,这就是Chrome在xpath中显示的结果。 Chrome开发工具适用于最终DOM,可能与实际的HTML源不同,因此您无法依赖Chrome中的xpath在Scrapy中使用。
答案 1 :(得分:0)
由于您提及tbody
,许多HTML都不遵循使用tbody
的规则,并且Chrome通常会通过自动添加tbody
来修复它。如果您打印回复HTML,则找不到任何tbody
。