我现在想从亚马逊页面上抓取一些数据,但我有点卡住了。
例如,让我们以这个页面为例。
我想刮掉每一种鞋子的尺码和颜色。在打开源代码并搜索“variationValues”时,可以找到这些数据。

在那里,我们可以看到一种包含所有尺寸和颜色的字典,在下面的“asinToDimentionIndexMap”中,每个产品代码都用数字表示来自variationValues“字典”的变体。
例如,在asinToDimentionIndexMap中,我们可以看到
"B01KWIUH5M":[0,0]这意味着产品代码B01KWIUH5M与尺寸'8M US‘(在variationValues size_name部分中的位置0)和颜色'Teal’(与前面的想法相同)相关联。
我想同时抓取variationValues和asinToDimentionIndexMap,这样就可以将IndexMap编号与variationValues编号关联起来。
网站上的另一个人(顺便说一句,感谢你的帮助)建议这样做。
script = response.xpath('//script/text()').extract_frist()
import re
# capture everything between {}
data = re.findall(script, '(\{.+?\}_')
import json
d = json.loads(data[0])
d['products'][0]我大概能理解第一部分的意思。我们将“script”的所有内容都作为字符串获取,然后获取{}之间的所有内容。问题是在那之后会发生什么。我对json的了解不是很多,读了一些关于它的东西也没有多大帮助。
有没有办法用variationValues和asinToDimentionIndexMap从这些数据中获取2个字典或列表?(也许在中间使用一些正则表达式来从一个大字符串中获取一些数据)。或者解释一下json部分发生了什么。
谢谢你的帮助!
编辑:添加variationValues和asinToDimensionIndexMap的照片
发布于 2019-01-06 08:13:41
我想你已经很接近了,曼纽尔!
下面的代码会将抓取的源代码转换为易于选择的框:
import json
d = json.loads(data[0])JSON是用于存储对象信息的通用格式。换句话说,它旨在将字符串数据解释为对象数据,而不管您使用的是哪种平台。
https://www.w3schools.com/js/js_json_intro.asp
我假设你可能会在哪里找到东西,一个挑战是在访问你的json对象中的特定"box“时是否有任何错误。
您的代码格式看起来是正确的,但您在“每个框”中的访问可能看起来不同。
例如:如果您的'asinToDimentionIndexMap‘对象嵌套在较大的'products’对象中的一个较小的框中,那么您可以这样访问它(在运行上面的代码之后):
d['products'][0]['asinToDimentionIndexMap']我对它进行了一些修改和删减,这样您就可以更好地理解特定json文件的结构。看看下面的链接。在右侧,您将看到“哪些框在另一个框内”--这正是您访问所需内容所需了解的内容。
例如,以下代码将生成"companyCompliancePolicies_feature_div":
import json
d = json.loads(data[0])
d['updateDivLists']['full'][0]['divToUpdate']帮助你的人之前为你概述了一个一般的案例,但你需要以这种方式查看结构,才能真正找到你正在寻找的东西。
发布于 2019-01-08 02:15:52
variationValues = re.findall(r'variationValues\" : ({.*?})', ' '.join(script))[0]
asinVariationValues = re.findall(r'asinVariationValues\" : ({.*?}})', ' '.join(script))[0]
dimensionValuesData = re.findall(r'dimensionValuesData\" : (\[.*\])', ' '.join(script))[0]
asinToDimensionIndexMap = re.findall(r'asinToDimensionIndexMap\" : ({.*})', ' '.join(script))[0]
dimensionValuesDisplayData = re.findall(r'dimensionValuesDisplayData\" : ({.*})', ' '.join(script))[0]现在您可以很容易地将它们转换为json,因为您可以根据需要将它们组合在一起。
https://stackoverflow.com/questions/54057433
复制相似问题