1

我正在抓取此页面以获取每个广告的数据:http: //www.cars2buy.co.uk/business-car-leasing/Abarth/695C/

这是我在scrapy shell中的代码:

scrapy shell "http://www.cars2buy.co.uk/business-car-leasing/Abarth/695C/"
for content in response.xpath('//*[@class="pitem"]/div[1]/div[2]/div[1]'):
          print content.xpath('//*[@class="detail"]/p/text()[2]').extract()

但它在每次迭代中只提取 48 个!!disered 输出应该是:

48 个月

48 个月

48 个月

36 个月

48 个月

48 个月

48 个月

48 个月

48 个月

36 个月

根据页面上的广告!有什么建议么?

4

1 回答 1

1

轻松修复。尝试将 a 添加.到第二个 xpath 的前面:

print content.xpath('.//*[@class="detail"]/p/text()[2]').extract()

解释:

以开头的 xpath/表示“从文档根目录开始搜索”,而以开头的 xpath.表示“在当前位置开始搜索”......所以它非常类似于导航文件系统的目录。

因此,如果没有.您的 xpath 表达式,则会提取页面上任何位置的所有匹配元素......并且在每次迭代中都这样做。

更新/添加

当 xpath 表达式用于子元素(scrapy 术语中的“选择器”)时,也会发生这种情况,如content本例所示。

Scrapy 在内部保留整个 html,并在 xpath 以/. 在这里详细解释:https ://doc.scrapy.org/en/latest/topics/selectors.html#working-with-relative-xpaths

于 2017-04-29T18:50:17.233 回答