大家好!今天给大家带来京东数据的简单采集和可视化分析,希望大家可以喜欢。本文来自古月星辰,大三本科生,数学专业,Python爬虫爱好者一枚。
一、目标数据
随着移动支付的普及,电商网站不断涌现,由于电商网站产品太多,由用户产生的评论数据就更多了,这次我们以京东为例,针对某一单品的评论数据进行数据采集,并且做简单数据分析。
二、页面分析
这个是某一手机页面的详情页,对应着手机的各种参数以及用户评论信息,页面URL是:
https://item.jd.com/10022971060622
.html

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

它的请求url:
https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98& productId=10022971060622 &score=0&sortType=5& page=0 &pageSize=10&isShadowSku=0&fold=1
注意看到这两个关键参数
1. productId: 每个商品有一个id
2. page: 对应的评论分页
三、解析数据
对评论数据的url发起请求:
url:https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98& productId=10022971060622 &score=0&sortType=5& page=0 &pageSize=10&isShadowSku=0&fold=1
json.cn 打开json数据(我们的评论数据是以json形式与页面进行交互传输的),如下图所示:

分析可知,评论url中对应十条评论数据,对于每一条评论数据,我们需要获取3条数
据,contents,color,size(注意到上图的maxsize,100,也就是100*10=1000条评论)。
四、程序
1.导入相关库
import requestsimport jsonimport timeimport openpyxl #第三方模块,用于操作Excel文件的#模拟浏览器发送请求并获取响应结果import random
2.获取评论数据
def get_comments(productId,page): 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) resp=requests.get(url,headers=headers) s1=resp.text.replace('fetchJSON_comment98(','') s=s1.replace(');','') res=json.loads(s) print(type(res)) return res
3.获取最大页数(也可以不写)
def get_max_page(productId): dic_data=get_comments(productId,0) return dic_data['maxPage']
4.提取数据
def get_info(productId): lst=[] for page in range(0,get_max_page(productId)): comments=get_comments(productId,page) comm_lst=comments['comments'] for item in comm_lst: content=item['content'] color=item['productColor'] size=item['productSize'] lst.append([content,color,size]) time.sleep(3) save(lst)
5.用于将爬取到的数据存储到Excel中
def save(lst): wk=openpyxl.Workbook () sheet=wk.active for item in lst: sheet.append(item) wk.save('销售数据.xlsx')
6.运行程序
if __name__ == '__main__': productId='10029693009906' get_info(productId)

五、简单数据
1.简单配置
import pandas as pd import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsedata = pd.read_excel('./销售数据.xlsx', header=None, names = ['comments','color','intro'] ) data.head()

2.手机颜色数量对比
x = ['白色','黑色','绿色','蓝色','红色','紫色']y = [314,295,181,173,27,10]plt.bar(x,y)plt.title('各种颜色手机数量对比')plt.xlabel('颜色')plt.ylabel('数量')plt.show()

可以看出用户购买的手机白色和黑色的机型比较多.占据了60%多。3.评论词云展示1)先要提取评论数据
import xlrddef strs(row): values = ""; for i in range(len(row)): if i == len(row) - 1: values = values + str(row[i]) else: values = values + str(row[i]) return valuesdata = xlrd.open_workbook("./销售数据.xlsx")sqlfile = open("data.txt", "a") table = data.sheets()[0] nrows = table.nrows ncols = table.ncols colnames = table.row_values(1) for ronum in range(1, nrows): row = table.cell_value(rowx=ronum, colx = 0) values = strs(row) sqlfile.writelines(values + "\n") sqlfile.close()
2)词云展示
import jiebafrom PIL import Imageimport numpy as npfrom wordcloud import WordCloudimport matplotlib.pyplot as plttext = open("./data.txt",encoding='gbk').read()text = text.replace('\n',"").replace("\u3000","")
text_cut = jieba.lcut(text)text_cut = ' '.join(text_cut)
注意: 这里我们不能使用encoding='uth-8',会报出一个错误:
> 'utf-8' codec can
't decode byte 0xd3 in position 0: invalid continuation byte
所以我们需要改成 gbk。
word_list = jieba.cut(text)space_word_list = ' '.join(word_list)print(space_word_list)mask_pic = np.array(Image.open("./xin.png"))word = WordCloud( font_path='C:/Windows/Fonts/simfang.ttf', mask=mask_pic, background_color='white', max_font_size=150, max_words=2000, stopwords={'的'} ).generate(space_word_list)image = word.to_image()word.to_file('2.png') image.show()
最后得到的效果图,如下图所示:
