0

请帮我从这个链接中抓取产品名称: http ://www.gap.com/browse/category.do?cid=5168&scrollTo=product353401012&scrollTo=product353401012#pageId=0&department=75

产品名称包含在 div 中的 class="product-card--name" 中。当我运行 :response.css('div.product-card--name::text').extract() 时,它返回一个空列表。

请同时提供 css 和 xpath 命令。

4

1 回答 1

0

正如 Gaby 所说,内容是动态加载的。您可以通过以下方式查看:

  • 用chrome打开网站报废(firefox也有办法)
  • 按 F12 打开 DevTools
  • 选择“网络”标签
  • 选择“XHR”作为过滤器
  • 进行搜索(或重新加载网站)

XHR 过滤器

您将看到一个项目列表,您想要的是:

search?cid=5168&isFacetsEnabled=true&globalShippingCountryCode=&globalShippingCurrencyCode=&locale=en_US&pageId=0

如果您单击它,您可以看到带有标题的 http 请求和带有您想要的所有数据的响应。

要在scrapy上执行此操作有点复杂,您必须废弃此链接,但使用“POST”方法而不是默认方法(“GET”)。要从一个爬虫蜘蛛做到这一点:

yield scrapy.Request(url, self.parse_data, method="POST", headers=headers, body=body)

URL 应该是您在 XHR 过滤器中找到的那个,使用的方法是“POST”,您应该复制我们之前找到的标题,并且在正文中包含您正在搜索的特定参数。从那里你会得到一个 JSON 响应,你可以将它保存到一个文件或做任何你想做的事情。

如果您需要更多详细信息,请告诉我。

于 2016-12-05T23:12:30.313 回答