2017-02-24 50 views
0

我想刮了一件衣服的价格离这个网站刮:http://www.asos.com/asics/asics-gel-kayano-evo-trainers-in-black-h707n-9090/prd/7592389?iid=7592389&clr=Black&cid=4209&pgesize=36&pge=0&totalstyles=2160&gridsize=3&gridrow=2&gridcolumn=1问题与渲染的网站

这里是页的link to a screenshot被刮掉。

使用Scrapy壳:

response.xpath('//span[@data-id="current-price"]/text()').extract()

甚至渲染后的网站不返回任何内容。任何想法如何从网站刮这块价格信息?

谢谢!

回答

0

Scrapy不执行JavaScript呈现,因为您需要浏览器自动化服务,如seleniumsplash

但是,在这种情况下,您仍然可以从相同的原始响应中获取所需的信息,因为它包含数据(但未在最终出现的html标记上呈现)。大多数网站从不同的请求中获得额外的信息,这导致更难以抓取。

你可以得到的信息,你要这样说:

import json 
... 

d = json.loads(response.xpath('//script[contains(., "Pages/FullProduct")]/text()').re_first("view\('(\{.*\})',")) 
print d['price'] // {u'currency': u'GBP', u'current': 70.0, u'previous': 0.0, u'rrp': 0.0} 
print d['price']['current'] // 70.0 
+0

非常感谢!这工作得很好。如果可以的话,我可以问一下'.re_first(“view \('(\ {。* \})',”))'是如何工作的?我知道这是使用正则表达式 – jiexun

+0

是的,它只是一个方便的scrapy方法使用正则表达式与选择器的输出 – eLRuLL