当前位置:
首页 >
爬取京东淘宝商品销量并可视化处理数据
发布时间:2025/3/20
45
豆豆
生活随笔
收集整理的这篇文章主要介绍了
爬取京东淘宝商品销量并可视化处理数据
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目的:获取京东和淘宝的同一种手机型号的销量信息,获取三组,对比销量,并将数据可视化处理。
一、京东销量获取
如下面的例子:
京东销量: data-sku:对应下一个页面的productId defaultGoodCount:代表销量 commentCount评论数==总销量 fetchJSON_comment98({"productAttr": null,"productCommentSummary": {"skuId": 100011336064,"defaultGoodCount": 133870,"defaultGoodCountStr": "13万+","commentCount": 193409,"commentCountStr": "19万+","goodCount": 55121,"goodCountStr": "5.5万+",},怎么找到上面的信息呢?就拿荣耀V30手机来讲。
打开开发者工具,点击商品评价,会出现一大堆数据,我们选择JS,然后选择productPageComments.action
OK,在请求头中就能看到我们想要的链接。然后利用正则表达式提取我们想要的信息即可。
二、淘宝销量获取
如下面的例子:
淘宝销量: 1、view_sales 2、setMdskip({"defaultModel": {"sellCountDO": {"sellCount": "1.5万+","success": true}} }) 3、comment_count评论数==总销量(我们采用这种方法)那么怎么获取我们想要的信息呢?我们输入商品后,选择销量排序,会得到这样的一个链接
"https://s.taobao.com/search?q=" + "商品名称" + "&sort=sale-desc"
右键查看源代码,即可找到我们想到的信息,即“comment_count”,OK,这样不就好办了吗?直接正则表达式提取即可!
三、代码:
import requests import re import csv from matplotlib import pyplot as plt import matplotlib as mpl import numpy as np list = [] # 列表用来存放商品信息# 构造淘宝请求头 kv = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36","Cookie":'' } # 京东请求头 jd = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" }# 获取淘宝HTML页面 def getHTMLpages(url):try:r = requests.get(url, headers=kv, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""# 获取京东HTML页面 def getHTMLpages_JD(url):try:r = requests.get(url, headers=jd)# print(r.status_code) # 打印状态码,若为200则正常page_connent = r.content.decode('gbk') # 设置内容编码格式为gbkreturn page_connentexcept:return "异常"# 将淘宝商品信息存入列表 def getGoodsinfo(list, html, flag):if flag == 0:tit = "荣耀v30手机"elif flag == 1:tit = "小米10手机"else:tit = "vivoS6手机"sales = re.findall(r'\"comment_count\"\:\"[\d]*?\"', html) # 正则表达式查找总销量sal = eval(sales[0].split(':')[1]) # eval去掉引号,split(":")[1]表示":"后面的内容list.append([tit, "淘宝", sal]) # 将信息存进列表return list# 将京东商品信息存入列表 def getGoodsinfo_JD(list, html_jd, flag):if flag == 0:tit = "荣耀v30手机"elif flag == 1:tit = "小米10手机"else:tit = "vivoS6手机"sales = re.findall(r'\"commentCount\"\:[\d]*', html_jd) # 正则表达式查找总销量sal = eval(sales[0].split(':')[1])list.append([tit, "京东", sal])# 从列表中读取商品信息 def printGoodsinfo(list):form = "{:<10}\t\t{:<10}\t{:<8}"print(form.format("手机型号", "销售平台", "商品销量", chr(12288)))for i in list: # i代表一行print(form.format(i[0], i[1], i[2], chr(12288)))# 保存数据为csv文件 def saveData(list):try:# 创建文件对象f=open('D:\\GoodsInfo.csv','w',newline='',encoding='gbk')# newline=''是为了去掉每条数据下面的空行# 基于文件对象构建csv写入对象csv_writer = csv.writer(f)# 构建列表头csv_writer.writerow(["手机型号", "销售平台", "商品销量"])# 写入csv文件内容for i in range(len(list)):csv_writer.writerow(list[i])f.close()print("保存成功!文件为D盘下的GoodsInfo.csv")except:print("保存失败!")# 根据csv文件绘图 def drawData(list):fig, ax = plt.subplots() # 新建一个fig和axes对象mpl.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体mpl.rcParams["axes.unicode_minus"] = Falsex = np.arange(3) # x轴下标数量count_taobao = [] # 构造列表淘宝销量count_jd = [] # 京东销量for i in range(len(list)):if (i % 2 == 0): # 下标0、2、4为淘宝销量count_taobao.append(int(list[i][2]))else: # 下标1、3、5为京东销量count_jd.append(list[i][2])bar_width = 0.35 # 柱条宽度tick_label = ["荣耀V30手机", "小米10手机", "vivoS6手机"] # x轴坐标plt.bar(x,count_taobao,bar_width,align="center",color="c",label="淘宝平台",alpha=0.5) # alpha表透明度plt.bar(x + bar_width,count_jd,bar_width,color="b",align="center",label="京东平台",alpha=0.5)plt.xlabel("手机型号")plt.ylabel("平台销量")ax.set_title("三种型号手机在京东和淘宝销量对比图") # 设置标题plt.xticks(x + bar_width / 2, tick_label) # 实现并列效果plt.legend() # 显示图例plt.savefig('D:\\drawData.png') # 保存图片plt.show() # 将图片显示出来if __name__ == "__main__":print("该程序将自动分别爬取华为荣耀V30、小米10和vivoS6手机在淘宝和京东的销量")print("程序即将开始执行......")print("开始爬取华为荣耀V30在淘宝的销量数据...")# 此链接为按照销量排序的链接start_url_taobao = "https://s.taobao.com/search?q=" + "荣耀v30" + "&sort=sale-desc"html = getHTMLpages(start_url_taobao)getGoodsinfo(list, html, 0)print("开始爬取华为荣耀V30在京东的销量数据...")start_url_jd = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100010260230&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"html_jd = getHTMLpages_JD(start_url_jd)# print(html_jd)getGoodsinfo_JD(list, html_jd, 0)print("开始爬取小米10在淘宝的销量数据...")start_url_taobao = "https://s.taobao.com/search?q=" + "小米10手机" + "&sort=sale-desc"html = getHTMLpages(start_url_taobao)getGoodsinfo(list, html, 1)print("开始爬取小米10在京东的销量数据...")start_url_jd = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100011336064&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"html_jd = getHTMLpages_JD(start_url_jd)getGoodsinfo_JD(list, html_jd, 1)print("开始爬取vivoS6在淘宝的销量数据...")start_url_taobao = "https://s.taobao.com/search?q=" + "vivoS6" + "&sort=sale-desc"html = getHTMLpages(start_url_taobao)getGoodsinfo(list, html, 2)print("开始爬取vivoS6在京东的销量数据...")start_url_jd = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100011924580&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1"html_jd = getHTMLpages_JD(start_url_jd)getGoodsinfo_JD(list, html_jd, 2)print("爬取完毕!结果如下:")printGoodsinfo(list)print("现在将数据存入CSV文件中...")saveData(list)print("现在将数据可视化展示出来:")drawData(list)print("图片保存位置为D盘的drawData.png")
总结
以上是生活随笔为你收集整理的爬取京东淘宝商品销量并可视化处理数据的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 前端之登录注册页面案例
- 下一篇: 三种方法删除有序表中s和t直接的元素(包