又来折腾亚马逊了......
从最近的几次爬取亚马逊的情况来看,数据获取难度还算是一般,恶心的就在数据处理方面,一堆的JS,HTML等等罗列在一起。不怎么费脑子,但是费眼。
正文开始。
一、请求分析
特惠信息页面:/gp/goldbox
照例,打开开发者模式,清除cookie,然后再次请求:
就直接查看这个当前页的请求,预览的时候发现并没有数据:
为了避嫌该打码的地方都打了,求审核高抬贵手
但是我在另外的请求发现了想要的数据:
https://data.xxx.com/api/marketplaces/ATVPDKIKX0DER/deals/2ba64a89,0164bea5,cc744f0c,cd92d862,ee824116,3169c9f5,78d7cbde,340b91b0,e5663819,d1dcecb2,5cbe503e,322beb76,20a10f2c,8772f291,a4653316,e7c24724,5e7ed3bf,8e249c83,b7aca80c,5f003b5e,a03fb361,cdfb36cd,14807e7b,03b1853a,6a4292e7,d7c52de3,18cf263d,cb0186a7,528ae49c,d465196c
于是我搜索了一下这个请求其中的一个参数2ba64a89,发现了数据还是藏在刚才请求的连接了,主要是数据太杂,没有发现:
那么就直接请求就行了。
二、发送请求
简简单单的get请求,直接贴上代码:
def getAmazon():
url = 'https://www.amazon.com/gp/goldbox'
headers = {
'authority': 'www.amazon.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}
res = requests.get(url=url,headers=headers,proxies=getApiIp())
content = res.content
content = content.decode('utf-8')
开始费眼了,下面开始数据分析。
三、数据分析
刚才的开发者模式,将刚才请求的内容格式化,一直往下拖就能找到数据列表了:
直接上结论吧,这些信息都存储在aapiGetDealsList列表中的entities的这个列表,把里面的true和false替换成True和False之后,eval格式化之后就成了正常处理的python list了。
Datainfo = re.findall("entities\":(.*?)}]},\"initialLoadTimeUtc",content)[0]
infos = Datainfo.replace("true","True").replace("false","False")
infos = eval(infos)
for info in infos:
print(info)
图片,价格,到期时间这些东西都在这里了。
四、写在最后
写了三期的亚马逊了,爬取了列表,评论和优惠,每次最头疼的就是数据的解析,太乱了。请求方面确实没啥太多的影响,多亏了ipidea的代理,高速稳定质量高,才能那么顺利的获取到想要的东西,新用户可以白嫖流量哦!
地址:http://www.ipidea.net/?utm-source=csdn&utm-keyword=?wb
不用白不用
最后贴上代码吧:
def getAmazon():
url = 'https://www.amazon.com/gp/goldbox'
headers = {
'authority': 'www.amazon.com',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36',
}
res = requests.get(url=url,headers=headers,proxies=getApiIp())
content = res.content
content = content.decode('utf-8')
Datainfo = re.findall("entities\":(.*?)}]},\"initialLoadTimeUtc",content)[0]
infos = Datainfo.replace("true","True").replace("false","False")
infos = eval(infos)
for info in infos:
print(info)
getAmazon()
也太水了!