首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从http和javaScript站点抓取数据

从http和javaScript站点抓取数据
EN

Stack Overflow用户
提问于 2019-01-06 07:58:15
回答 2查看 117关注 0票数 0

我现在想从亚马逊页面上抓取一些数据,但我有点卡住了。

例如,让我们以这个页面为例。

https://www.amazon.com/NIKE-Hyperfre3sh-Athletic-Sneakers-Shoes/dp/B01KWIUHAM/ref=sr_1_1_sspa?ie=UTF8&qid=1546731934&sr=8-1-spons&keywords=nike+shoes&psc=1

我想刮掉每一种鞋子的尺码和颜色。在打开源代码并搜索“variationValues”时,可以找到这些数据。

在那里,我们可以看到一种包含所有尺寸和颜色的字典,在下面的“asinToDimentionIndexMap”中,每个产品代码都用数字表示来自variationValues“字典”的变体。

例如,在asinToDimentionIndexMap中,我们可以看到

代码语言:javascript
复制
"B01KWIUH5M":[0,0]

这意味着产品代码B01KWIUH5M与尺寸'8M US‘(在variationValues size_name部分中的位置0)和颜色'Teal’(与前面的想法相同)相关联。

我想同时抓取variationValues和asinToDimentionIndexMap,这样就可以将IndexMap编号与variationValues编号关联起来。

网站上的另一个人(顺便说一句,感谢你的帮助)建议这样做。

代码语言:javascript
复制
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的照片

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-06 08:13:41

我想你已经很接近了,曼纽尔!

下面的代码会将抓取的源代码转换为易于选择的框:

代码语言:javascript
复制
import json
d = json.loads(data[0])

JSON是用于存储对象信息的通用格式。换句话说,它旨在将字符串数据解释为对象数据,而不管您使用的是哪种平台。

https://www.w3schools.com/js/js_json_intro.asp

我假设你可能会在哪里找到东西,一个挑战是在访问你的json对象中的特定"box“时是否有任何错误。

您的代码格式看起来是正确的,但您在“每个框”中的访问可能看起来不同。

例如:如果您的'asinToDimentionIndexMap‘对象嵌套在较大的'products’对象中的一个较小的框中,那么您可以这样访问它(在运行上面的代码之后):

代码语言:javascript
复制
d['products'][0]['asinToDimentionIndexMap']

我对它进行了一些修改和删减,这样您就可以更好地理解特定json文件的结构。看看下面的链接。在右侧,您将看到“哪些框在另一个框内”--这正是您访问所需内容所需了解的内容。

JSON Object Viewer

例如,以下代码将生成"companyCompliancePolicies_feature_div":

代码语言:javascript
复制
import json
d = json.loads(data[0])
d['updateDivLists']['full'][0]['divToUpdate']

帮助你的人之前为你概述了一个一般的案例,但你需要以这种方式查看结构,才能真正找到你正在寻找的东西。

票数 1
EN

Stack Overflow用户

发布于 2019-01-08 02:15:52

代码语言:javascript
复制
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,因为您可以根据需要将它们组合在一起。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54057433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档