Scrapy中的嵌套选择器

2024-10-02 18:25:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难让嵌套选择器像Scrapy(http://doc.scrapy.org/en/latest/topics/selectors.html)文档中描述的那样工作

我得到的是:

sel = Selector(response)
level3fields = sel.xpath('//ul/something/*')

for element in level3fields:
    site = element.xpath('/span').extract()

当我在循环中打印出“element”时,我得到< Selector xpath='stuff seen above' data="u'< span class="something">text< /span>>

现在我有两个问题:

  1. 首先,在元素中,还应该有一个“a”节点(如<a href),但它不会出现在打印输出中,只有当我直接提取它时,它才会出现。这是打印错误还是“元素选择器”没有保留a节点(不提取)

  2. 当我打印出上面的“site”时,它应该显示一个包含span节点的列表。但是,它没有,它只打印出一个空列表。

我尝试了一系列的改变(在不同的地方多个到没有斜杠和星号(*),但是没有一个能让我更接近。在

本质上,我只想得到一个嵌套选择器,它在第二步(循环)中为我提供span节点。在

有人给我小费吗?在


Tags: http元素列表doc节点site选择器element
1条回答
网友
1楼 · 发布于 2024-10-02 18:25:04

关于你的第一个问题,这只是一个印刷错误。^选择器上的{}和__str__方法只打印数据的前40个字符(元素表示为HTML/XML或文本内容)。见https://github.com/scrapy/scrapy/blob/master/scrapy/selector/unified.py#L143

level3fields上的循环中,应该使用相对XPath表达式。使用/span将直接在根节点下查找span元素,我猜这不是您想要的。在

试试这个:

sel = Selector(response)
level3fields = sel.xpath('//ul/something')

for element in level3fields:
    site = element.xpath('.//span').extract()

相关问题 更多 >