爬虫项目九:亚马逊中国商品数据爬虫


前言

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” 中回复“亚马逊”获取,公众号已上线多个爬虫项目具体可按我主页文章回复获取
在这里插入图片描述
最后谢谢大家的观看,主页已经更新多个爬虫项目,如果感兴趣可以去看看

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值