【爬虫】亚马逊畅销数据爬取Demo
本帖最后由 Test_dada 于 2021-1-20 10:06 编辑前言:
本贴仅做学习交流,请勿用于商业牟利
如有侵权,联系处理
觉得有用的点赞下,谢谢
数据准备:
先创建表格,路径:C:\Users\Administrator\Desktop\亚马逊畅销数据爬取.xlsx
表格共有四个数据(商品名、图片、星级、销量)
该代码是单线程运行,数据量过多时,会有数据重复的情况
有时间再改造,有能力的小伙伴可改为多线性运行
import bs4
import requests
import time
import datetime
from random import random
import xlrd
import re
from xlutils.copy import copy
from pprint import pprint
class Amazon_Demo():
'''畅销商品抓取Demo'''
def __init__(self, data_path, num=10):
self.num = num
self.data_path = data_path
def timestamp(self):
'''当前时间转换为时间戳'''
now = datetime.datetime.now()
# print(now.timetuple(), type(now.timetuple()))# timetuple()返回 struct_time时间元组
timestamp = time.mktime(now.timetuple())# mktime()接收时间元组转换为时间戳
return int(timestamp)
def urls(self):
''' 多页面url汇总
num: 要爬取的页面数
'''
URL = []
for n in range(1, self.num+1):
Url = "https://www.amazon.com/s?i=specialty-aps&srs=17938598011&page={0}&language=zh&qid={1}&ref=sr_pg_{0}".format(n,self.timestamp())
URL.append(Url)
return URL
def active_demand(self):
'''亚马逊最畅销商品信息抓取'''
n = 1
srcObj_list = []# 存放商品信息
pprint(self.urls())
for url1 in self.urls():
print("抓取第%d页中... ..."%n)
# 修改头部信息
kv ={'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
req = requests.get(url1,headers=kv)
# print("当前头部信息:",req.request.headers)
# print("响应状态码:",req.status_code)
time.sleep(random() + 2)# random() 产生 0 到 1 之间的随机浮点数
req.encoding="utf-8"
bs = bs4.BeautifulSoup(req.text,features="lxml")
obj = bs.find_all("div",{"class":"a-section aok-relative s-image-fixed-height"}) # 图片所在父级
imgObj=[] # 用于存储img对象
for s in obj:
imgObj.append(s.find('img'))
# pprint(imgObj)
obj2 = bs.find_all("div",{"class":"a-row a-size-small"}) # 星级、评论数所在父级
for i,o in zip(obj2,imgObj):
num = re.findall(r'span aria-label="(.+?)">',str(i)) # 转换HTML格式为str后,正则截取评论数、星级
srcObj_list.append(, num])
n += 1
print("抓取商品信息总数:%d条"%len(srcObj_list))
return srcObj_list
def Write(self):
'''xlrd读取'''
workbook = xlrd.open_workbook(self.data_path)
sheetName = workbook.sheet_by_name("aaa")
nrows = sheetName.nrows# 当前表格行数
# print(nrows)
'''xlrd写入'''
new_workbook = copy(workbook)# 将xlrd对象拷贝转化为xlwt对象
new_worksheet = new_workbook.get_sheet(0)# 获取转化后工作簿中的第一个表格
datas = self.active_demand()
for data in datas:
new_worksheet.write(nrows, 0, data) # 写入商品名
new_worksheet.write(nrows, 1, data) # 图片链接
new_worksheet.write(nrows, 2, data) # 评星
new_worksheet.write(nrows, 3, data) # 评论数
nrows += 1
new_workbook.save(self.data_path)# 保存工作簿
print("数据写入成功!")
if __name__ == '__main__':
file_path = r'C:\Users\Administrator\Desktop\亚马逊畅销数据爬取.xlsx' # 保存路径
Amazon_Demo(file_path).Write()
结果
第44行代码编辑时,自动添加了一些格式代码,不知道怎么去除,小伙伴复制后自行删除那些就可以了
然后就是,爬不出数据时,也是在44行修改成你自己的headers参数就可以了,具体在哪看
前面还是会有爬不出数据的情况,所以后面在headers上又添加了一些参数,具体是在第44行替换的
kv = {'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} 一只帅祖宗 发表于 2021-3-25 16:05
楼主帮我看看这是怎么回事???
1.菜单-运行-cmd 打开命令窗口
2.输入pip list
3.查看xlrd库的版本(我是旧版1.20)
4.如果不是1.20版本,卸载新版,再安装旧版pip install xlrd==1.2.0
原因:xlrd更新到了2.0.1版本,只支持.xls文件,不支持.xlsx。 大神,能不能做个虾皮电商平台的畅销数据爬取 invzw 发表于 2020-11-27 15:27
大神,能不能做个虾皮电商平台的畅销数据爬取
python号称是,只要能看到的就能操作 学习下,感谢分享 学习了谢谢分享 很实用,感谢楼主分享代码! 最近在学py{:301_998:} 我看代码是自己手动定义爬取页数,可以稍微做个获取页码的操作就更好了 学习学习,感谢分享