Scrapy不会返回结果

时间:2017-04-13 06:19:13

标签: scrapy

我正在研究scrapy并试图浏览这个网站 - http://bananarepublic.gap.com/browse/category.do?cid=1055063&sop=true

但是我的scrapy代码找不到本网站上列出的产品链接。谁能告诉我为什么?使用的xpath是// [[class =“product-card - link”] / @ href

这是因为js吗?如果是这样,我尝试使用scrapy splash但仍然找不到列出的产品链接。有人可以帮忙!

谢谢!

2 个答案:

答案 0 :(得分:1)

这些项目是通过AJAX请求生成的。当您连接到页面时,将执行一个javascript脚本,该脚本会生成一些额外的http请求以检索某些json数据。但是,scrapy不执行任何javascript,因此您需要手动查找并调用这些AJAX请求。

请参阅相关问题:Can scrapy be used to scrape dynamic content from websites that are using AJAX?,了解如何检查网络流量并解决此类问题。

在这种特殊情况下,您可以看到正在发出的第一个xhr个请求返回一个包含所有项目数据的巨大json文件:

http://bananarepublic.gap.com/resources/productSearch/v1/search?cid=1055063&isFacetsEnabled=true&globalShippingCountryCode=&globalShippingCurrencyCode=&locale=en_US&

正如你所看到的,url需要一些参数,最重要的是它需要cid代表类别ID,而其他参数主要用于计算运费价格,所以如果你不关心这些就可以了以及:

http://bananarepublic.gap.com/resources/productSearch/v1/search?cid=1055063

答案 1 :(得分:1)

避免深入研究AJAX请求的替代方法是在处理完AJAX之后使用Splash(https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash/)来抓取页面。

可以更容易实现,你的xpath表达式应该可以正常使用Splash。但是刮板的速度会慢一些,因为它必须渲染每一页。