Python - Scrapy电子商务网站

时间:2018-02-23 10:17:50

标签: python web-scraping scrapy

我试图榨取这个产品的价格

http://www.asos.com/au/fila/fila-vintage-plus-ringer-t-shirt-with-small-logo-in-green/prd/9065343?clr=green&SearchQuery=&cid=7616&gridcolumn=2&gridrow=1&gridsize=4&pge=1&pgesize=72&totalstyles=4699

使用以下代码但它返回一个空数组

response.xpath('//*[@id="product-price"]/div/span[2]/text()').extract()

感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

因为站点是动态的(这是我在scrapy shell中使用view(response)命令时得到的: enter image description here 如您所见,价格信息没有出来。

解决方案: 飞溅 2. selenium + phantomJS

检查此答案可能也有帮助:Empty List From Scrapy When Using Xpath to Extract Values

答案 1 :(得分:1)

稍后由浏览器添加价格,该浏览器使用在html中找到的javascript代码呈现页面。如果您在浏览器中禁用了javascript,您会注意到该页面看起来会有所不同。另外,请查看页面源代码,通常是未更改的,以查看您正在查找的代码(尚未)。

Scrapy不执行任何JavaScript代码。它接收普通的html,这就是你必须使用的东西。

如果你想从浏览器中看起来与浏览器相同的页面中提取数据,我建议使用像Splash这样的无头浏览器(如果你已经在使用scrapy):https://github.com/scrapinghub/splash 您可以通过programaticaly告诉它下载您的页面,渲染它并选择您感兴趣的数据点。

另一种方法是检查向Asos API发出的请求产品数据的请求。在您的情况下,对于此产品: http://www.asos.com/api/product/catalogue/v2/stockprice?productIds=9065343&currency=AUD&keyStoreDataversion=0ggz8b-4.1&store=AU

通过查看开发者工具(在Google Chrome上)中找到的XMLHttpRequest (XHR)标签中发送的所有Network请求,我得到了这个网址。

答案 2 :(得分:0)

您可以尝试在HTML中找到JSON(使用正则表达式)并解析它:

json_string = response.xpath('//script[contains(., "function (view) {")]/text()').re_first( r'view\(\'([^\']+)' )

data = json.loads(json_string)
price = data["price"]["current"]