无法从网站上获取列表值

时间:2017-06-06 09:19:42

标签: python scrapy scrapy-spider scrapy-shell

我从欲望网站上获取所有细节但无法获得一些具体信息,请指导我。

  

目标域名:https://shop.adidas.ae/en/messi-16-3-indoor-boots/BA9855.html

     

我的代码是response.xpath('//ul[@class="product-size"]//li/text()').extract()

enter image description here

  

需要获取数据!!!

enter image description here
谢谢!

2 个答案:

答案 0 :(得分:2)

电子商务网站通常在页面源中使用json格式的数据,然后将javscript解压缩到用户端。

在这种情况下,您可以在禁用javascript的情况下打开页面源并搜索关键字(如特定大小)。

我发现在这种情况下可以使用正则表达式找到它:

import re
import json
data = re.findall('window.assets.sizesMap = (\{.+?\});', response.body_as_unicode())
json.loads(data[0])
Out: 
{'16': {'uk': '0k', 'us': '0.5'},
 '17': {'uk': '1k', 'us': '1'},
 '18': {'uk': '2k', 'us': '2.5'},
 ...}

编辑:更准确地说,你可能想要获得json的不同部分,但是答案或多或少是相同的:

data = re.findall('window.assets.sizes = (\{(?:.|\n)+?\});', response.body_as_unicode())
json.loads(data[0].replace("'", '"')) # replace single quotes to doubles

答案 1 :(得分:1)

您要获取的数据是从javascript加载的。它在标签class="js-size-value "中明确说明。

如果您想获得它,则需要使用渲染服务。我建议你使用Splash,它安装简单,易于使用。您需要 docker 来安装splash。