前言
Python对亚马逊中国平台的商品数据抓取
提示:以下是本篇文章正文内容,下面案例可供参考
一、分析url
我们打开亚马逊中国官网输入商品关键词,观察url,其中有三个参数,K表示的就是商品关键词 可以直接用中文替换
https://www.amazon.cn/s?
k=%E8%A3%A4%E5%AD%90 ==》关键词
&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99 ==》无用
&ref=nb_sb_noss_1 ==》无用
修改后:
https://www.amazon.cn/s?k=裤子
现在我们再看第二页的url,除了关键词和页数之外 其他参数均无用
https://www.amazon.cn/s?
k=%E8%A3%A4%E5%AD%90 ==》关键词
&page=2 ==》页数
&__mk_zh_CN=%E4%BA%9A%E9%A9%AC%E9%80%8A%E7%BD%91%E7%AB%99
&qid=1616807347
&ref=sr_pg_1
修改后:
https://www.amazon.cn/s?k=裤子&page=2
于是我们可以得到url规律,K表示关键词page表示页数
第一页:https://www.amazon.cn/s?k=裤子&page=1
第二页:https://www.amazon.cn/s?k=裤子&page=2
第三页:https://www.amazon.cn/s?k=裤子&page=3
二、分析页面
我们简单的写个爬虫利用request把数据页面保存下载,看看能不能获取完整数据
import requests
text=requests.get("https://www.amazon.cn/s?k=裤子&page=2").text
with open("test.html","w",encoding="utf-8") as f:
f.write(text)
我们打开保存的html文件发现和正常浏览器打开的页面一样没有差别,证明亚马逊中国平台没有使用动态加载,可以直接利用requests访问获取数据
三、获取数据
我们选中一件商品右键检查元素,我们可以看到所有商品数据存在一个div标签下,有一点要注意就是div下的第一个div是没有数据的 他并不是商品数据,而是“价格和其他详情可能因尺寸和颜色而异”这句话,所有后续写代码时要不其剔除
知道了数据存在div中我们可以写代码
div_list=html.xpath('//div[@class="s-main-slot s-result-list s-search-results sg-row"]/div')[1:]
for div in div_list:
dic={}
try:
dic["title"]=div.xpath('.//a[@target="_blank"]/span[@dir="auto"]/text()')[0]
except:
dic["title"]=""
try:
dic["price"]=div.xpath('.//span[@class="a-price"]/span[1]/text()')[0]
except:
dic["price"]=""
try:
dic["comment_num"]=div.xpath('//span[@class="a-size-base"]/text()')[0]
except:
dic["comment_num"]=""
try:
dic["score"]=div.xpath('//a/i/span[@class="a-icon-alt"]/text()')[0]
except:
dic["score"]=""
try:
dic["preferential"]="".join(div.xpath('.//div[@class="a-row"]/span/text()'))
except:
dic["preferential"]=""
我们可以利用input交互式的方式运用到爬虫中,再者获取页面的总页数 打印出来,在利用input输入要采集的页数,for循环获取数据
self.keyword=input("请输入商品关键字:")
url="https://www.amazon.cn/s?k=%s"%(self.keyword)
text=requests.get(url).text
html = etree.HTML(text)
if html.xpath('//ul[@class="a-pagination"]/li[last()-1]') is None:
page = 1
else:
page = html.xpath('//ul[@class="a-pagination"]/li[last()-1]/text()')[0]
print("%s共检索到%d页数据" % (self.keyword,int(page)))
self.start_page = input("请输入起始页数:")
self.end_page = input("请输入结束页数:")
最终实现效果
完整代码我放在公众号 “阿虚学Python” 中回复“亚马逊”获取,公众号已上线多个爬虫项目具体可按我主页文章回复获取
最后谢谢大家的观看,主页已经更新多个爬虫项目,如果感兴趣可以去看看