Scrapy没有返回结果

问题描述:

我学习scrapy,我试图通过这个网站抓取 - http://bananarepublic.gap.com/browse/category.do?cid=1055063&sop=trueScrapy没有返回结果

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

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

谢谢!

这些项目是通过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&

正如你所看到的网址需要一些参数,最重要的它需要cid它代表类别ID和其他参数大多用于计算出货价格,所以如果你不关心那些该作品一样好:

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

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

可以更容易实现,你的xpath表达式应该可以在Splash中正常工作。但是刮板会变慢,因为它必须渲染每个页面。