【发布时间】:2015-09-12 01:21:01
【问题描述】:
我正在使用 Scrapy 来抓取一个包含项目列表的网站。但是,当遍历项目列表时,请求相对 xpath 会返回整个页面的所有匹配项目。我一直在使用 0.24,但是升级到最新的 (1.0) 遇到了同样的问题。
我已尝试使用 virtualenv 运行它,以避免与我系统上的其他库发生冲突但没有成功。
for sel in response.xpath('//ul[@class="items"]//div[@class="item"]'):
item = CrawledItem()
item['id'] = sel.xpath('.//input[@name="id"]/@value').extract()
我尝试使用scrapy parse 进行调试,并注意到 id 列表从所有匹配开始,然后慢慢减少,因此到最后一项它只匹配单个 id。我原本希望每个项目只有一个 id,但我得到了类似于下面的响应。
[
{
'id': [1,2,3,4,5,6,7,8,9,10]
},
{
'id': [1,2,3,4,5,6,7,8,9]
},
[..] // omitted
{
'id': [10]
}
]
我也尝试过使用 css 选择器,但没有成功。我的理解是.// 用于执行此操作。如何确保我只选择相对于当前选择器的选择?
【问题讨论】:
-
你能给我们你正在解析的网址吗?
-
很可能,问题出在
//ul[@class="items"]//div[@class="item"]表达式中。带有class="item"的divs 可能比您预期的要多。 -
我在 chrome 中通过
inspect element和scrapy shell进行了检查,它返回了我所期望的结果 -
你可以分享你正在抓取的网站网址吗?
-
这是这个页面:sainsburys.co.uk/shop/gb/groceries/meat-fish/ham-82654-44 我改变了问题中的 sn-p,但我试图从表单元素中获取 productId。作为单独的项目。
标签: python css xpath web-scraping scrapy