scrapy 剪贴xpath选择器不检索元素

vi4fp9gy  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(100)

来自此URL:https://www.basketball-reference.com/boxscores/202110190LAL.html,我想从这个xpath中提取文本:

//div[@id='div_four_factors']/table/tbody/tr[1]/td[1]

但是,我得到的元素是None。在Scrapy shell中,我使用以下代码:

>>> text = response.xpath("//div[@id='div_four_factors']/table/tbody/tr[1]/td[1]/text()").get()
>>> print(text)
>>> None

我尝试为要检索的元素编写正确的xpath,但没有得到任何结果。

mm5n2pyu

mm5n2pyu1#

这是因为那个表,而且看起来所有来自那个页面的表都是在页面加载之后用javascript加载的,所以xpath路径在你解析的响应html中并不存在。
如果你在浏览器中打开页面,右键点击并选择“打开页面源代码”或类似的选项,你可以看到这一点。或者,你可以只print(response.text),但它不会格式化,将难以阅读。
然而,它看起来确实像是表格的一个副本html在呈现时被注解掉了,这意味着你可以这样做:

In [1]: import re

In [2]: pat = re.compile(r'<!--(.*?)-->', flags=re.DOTALL)

In [3]: text = response.xpath("//div[@id='all_four_factors']//comment()").get()

In [4]: selector = scrapy.Selector(text=pat.findall(text)[0])

In [5]: result = selector.xpath('//tbody/tr[1]/td[1]')

In [6]: result
Out[6]: [<Selector xpath='//tbody/tr[1]/td[1]' data='<td class="right " data-stat="pace">1...'>]

In [7]: result[0].xpath('./text()').get()
Out[7]: '112.8'

In [8]:

相关问题