手把手教你采集京东销售数据并做简单的数据分析和可视化

大数据 数据可视化
随着移动支付的普及,电商网站不断涌现,由于电商网站产品太多,由用户产生的评论数据就更多了,这次我们以京东为例,针对某一单品的评论数据进行数据采集,并且做简单数据分析。

[[421418]]

前言

大家好!我是古月星辰,大三本科生,数学专业,Python爬虫爱好者一枚。今天给大家带来JD数据的简单采集和可视化分析,希望大家可以喜欢。

一、目标数据

随着移动支付的普及,电商网站不断涌现,由于电商网站产品太多,由用户产生的评论数据就更多了,这次我们以京东为例,针对某一单品的评论数据进行数据采集,并且做简单数据分析。

二、页面分析

这个是某一手机页面的详情页,对应着手机的各种参数以及用户评论信息,页面URL是:

  1. https://item.jd.com/10022971060622.html#none 

然后通过分析找到评论数据对应的数据接口,如下图所示:

它的请求url:

  1. https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_com 
  2. ment98& productId=10022971060622 &score=0&sortType=5& page=0 &pageSize=10&isShadowSk 
  3. u=0&fold=1 

注意看到这两个关键参数

1. productId: 每个商品有一个id

2. page: 对应的评论分页

三、解析数据

对评论数据的url发起请求:

  1. url:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comm 
  2. ent98& productId=10022971060622 &score=0&sortType=5& page=0 &pageSize=10&isShado 
  3. wSku=0&fold=1 

json.cn 打开json数据(我们的评论数据是以json形式与页面进行交互传输的),如下图所示:

分析可知,评论url中对应十条评论数据,对于每一条评论数据,我们需要获取3条数

据,contents,color,size(注意到上图的maxsize,100,也就是100*10=1000条评论)。

四、程序

1.导入相关库

  1. import  requests 
  2. import  json 
  3. import  time 
  4. import  openpyxl  #第三方模块,用于操作Excel文件的 
  5. #模拟浏览器发送请求并获取响应结果 
  6. import random 

2.获取评论数据

  1. def get_comments(productId,page): 
  2.     url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId={0}&score=0&sortType=5&page={1}&pageSize=10&isShadowSku=0&fold=1'.format(productId,page) # 商品id 
  3.     resp=requests.get(url,headers=headers) 
  4.     #print(resp.text)  #响应结果进行显示输出 
  5.     s1=resp.text.replace('fetchJSON_comment98(','') #fetchJSON_comment98( 
  6.     s=s1.replace(');',''
  7.     #将str类型的数据转成json格式的数据 
  8.     # print(s,type(s)) 
  9.     # print('*'*100) 
  10.     res=json.loads(s) 
  11.     print(type(res)) 
  12.     return res 

3.获取最大页数(也可以不写)

  1. def get_max_page(productId): 
  2.     dic_data=get_comments(productId,0)  #调用刚才写的函数,向服务器发送请求,获取字典数据 
  3.     return dic_data['maxPage'

4.提取数据

  1. def get_info(productId): 
  2.     #调用函数获取商品的最大评论页数 
  3.     #max_page=get_max_page(productId) 
  4.     # max_page=10 
  5.     lst=[]  #用于存储提取到的商品数据 
  6.     for page in range(0,get_max_page(productId)):   #循环执行次数 
  7.         #获取每页的商品评论 
  8.         comments=get_comments(productId,page) 
  9.         comm_lst=comments['comments']   #根据key获取value,根据comments获取到评论的列表(每页有10条评论) 
  10.         #遍历评论列表,分别获取每条评论的中的内容,颜色,鞋码 
  11.         for item in comm_lst:   #每条评论又分别是一个字典,再继续根据key获取值 
  12.             content=item['content']  #获取评论中的内容 
  13.             color=item['productColor'] #获取评论中的颜色 
  14.             size=item['productSize'] #鞋码 
  15.             lst.append([content,color,size])  #将每条评论的信息添加到列表中 
  16.         time.sleep(3)  #延迟时间,防止程序执行速度太快,被封IP 
  17.     save(lst)  #调用自己编写的函数,将列表中的数据进行存储 

5.用于将爬取到的数据存储到Excel中

  1. def save(lst): 
  2.     wk=openpyxl.Workbook () #创建工作薄对象 
  3.     sheet=wk.active  #获取活动表 
  4.     #遍历列表,将列表中的数据添加到工作表中,列表中的一条数据,在Excel中是 一行 
  5.     for item in lst: 
  6.         sheet.append(item) 
  7.     #保存到磁盘上 
  8.     wk.save('销售数据.xlsx'

6.运行程序

  1. if __name__ == '__main__'
  2.     productId='10029693009906' # 单品id 
  3.     get_info(productId) 

五、简单数据

1.简单配置

  1. # 导入相关库 
  2. import pandas as pd  
  3. import matplotlib.pyplot as plt 
  4. # 这两行代码解决 plt 中文显示的问题 
  5. plt.rcParams['font.sans-serif'] = ['SimHei'
  6. plt.rcParams['axes.unicode_minus'] = False 
  7. # 由于采集的时候没有设置表头,此处设置表头 
  8. data = pd.read_excel('./销售数据.xlsx', header=None, names = ['comments','color','intro'] ) #  
  9. data.head() 

2.手机颜色数量对比

  1. x = ['白色','黑色','绿色','蓝色','红色','紫色'
  2. y = [314,295,181,173,27,10] 
  3. plt.bar(x,y) 
  4. plt.title('各种颜色手机数量对比'
  5. plt.xlabel('颜色'
  6. plt.ylabel('数量'
  7. # plt.legend() # 显示图例 
  8. plt.show() 

可以看出用户购买的手机白色和黑色的机型比较多.占据了60%多。3.评论词云展示1)先要提取评论数据

  1. import xlrd 
  2. def strs(row): 
  3.     values = ""
  4.     for i in range(len(row)): 
  5.         if i == len(row) - 1: 
  6.             values = values + str(row[i]) 
  7.         else
  8.             values = values + str(row[i]) 
  9.     return values 
  10. # 打卡文件 
  11. data = xlrd.open_workbook("./销售数据.xlsx"
  12. sqlfile = open("data.txt""a")  # 文件读写方式是追加 
  13. table = data.sheets()[0]  # 表头 
  14. nrows = table.nrows  # 行数 
  15. ncols = table.ncols  # 列数 
  16. colnames = table.row_values(1)  # 某一行数据 
  17. # 打印出行数列数 
  18. for ronum in range(1, nrows): 
  19.         row = table.cell_value(rowx=ronum, colx = 0) #只需要修改你要读取的列数-1 
  20.         values = strs(row)  # 调用函数,将行数据拼接成字符串 
  21.         sqlfile.writelines(values + "\n")  # 将字符串写入新文件 
  22. sqlfile.close()  # 关闭写入的文件 

2)词云展示

  1. # 导入相应的库 
  2. import jieba 
  3. from PIL import Image 
  4. import numpy as np 
  5. from wordcloud import WordCloud 
  6. import matplotlib.pyplot as plt 
  7. # 导入文本数据并进行简单的文本处理 
  8. # 去掉换行符和空格 
  9. text = open("./data.txt",encoding='gbk').read() 
  10. text = text.replace('\n',"").replace("\u3000",""
  11.  
  12. # 分词,返回结果为词的列表 
  13. text_cut = jieba.lcut(text) 
  14. # 将分好的词用某个符号分割开连成字符串 
  15. text_cut = ' '.join(text_cut) 

注意: 这里我们不能使用encoding='uth-8',会报出一个错误:

  1. 'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte 

所以我们需要改成 gbk。

  1. word_list = jieba.cut(text) 
  2. space_word_list = ' '.join(word_list) 
  3. print(space_word_list) 
  4. # 调用包PIL中的open方法,读取图片文件,通过numpy中的array方法生成数组 
  5. mask_pic = np.array(Image.open("./xin.png")) 
  6. word = WordCloud( 
  7.     font_path='C:/Windows/Fonts/simfang.ttf',  # 设置字体,本机的字体 
  8.     mask=mask_pic,  # 设置背景图片 
  9.     background_color='white',  # 设置背景颜色 
  10.     max_font_size=150,  # 设置字体最大值 
  11.     max_words=2000,  # 设置最大显示字数 
  12.     stopwords={'的'}  # 设置停用词,停用词则不在词云途中表示 
  13.                  ).generate(space_word_list) 
  14. image = word.to_image() 
  15. word.to_file('2.png')  # 保存图片 
  16. image.show() 

最后得到的效果图,如下图所示:

本文转载自微信公众号「Python爬虫与数据挖掘」,可以通过以下二维码关注。转载本文请联系Python爬虫与数据挖掘公众号。

 

 

责任编辑:武晓燕 来源: Python爬虫与数据挖掘
相关推荐

2017-05-18 12:45:35

数据分析数据理解数据

2020-12-17 09:40:01

Matplotlib数据可视化命令

2015-10-26 09:24:30

微信公众号数据分析

2021-08-26 09:00:48

PyechartsPython可视化

2021-05-10 06:48:11

Python腾讯招聘

2021-07-14 09:00:36

Python数据Python基础

2020-06-17 08:35:12

数据分析Python代码

2017-10-18 16:08:15

可视化交叉验证代码

2023-02-01 10:16:50

Python可视化

2020-05-14 10:19:23

Python可视化分析

2022-02-09 09:03:42

分词、词频统计可视化

2021-09-30 18:27:38

数据仓库ETL

2021-12-29 20:20:25

结构化数据Pandas

2018-04-05 22:55:34

数据问答系统SQuAD

2020-06-22 13:41:27

数据集数据清洗数据模型

2017-01-12 17:28:59

数据分析数据可视化可视化

2022-07-24 21:43:48

数据可视化大数据

2020-04-14 10:20:12

MySQL数据库死锁

2024-10-16 11:40:47

2021-09-18 14:26:49

Linux Linux 启动流程Linux 系统
点赞
收藏

51CTO技术栈公众号