爬取了3W+用户评价后发现用户眼中的坚果3是这样的

实现过程介绍

从网页爬取数据

思路

首先我们打开京东商城坚果3 的购买页面:
这里写图片描述
然后按F12进入开发者控制台(审查元素):
这里写图片描述
发现什么都没有,不要紧,点开评论区,你就会发现控制台出现类似这些信息:
这里写图片描述
控制台从刚才的没有信息到现在获取到当前信息,唯一的变化就是你打开了评论,所以网页返回的评论区内容一定在当前控制台的某个位置,从Name字段一个一个分析,就可以发现很明显的一行:
这里写图片描述
很明显这里就是我们需要的评论区数据,然后仔细分析其对应的Headers,就会发现我们获取数据需要的基本信息:
这里写图片描述
然后点开preview,就会发现返回数据转化为json格式后的内容:
这里写图片描述
进一步打开Response,看到网页返回的原始数据:
这里写图片描述
可以看到,网页返回的原始数据是用一个fetchJSON_comment98vv1587包裹着的json字符串,到这里,我们的思路就很清晰了:
首先用URL和对应的Query String Parameters模仿网页发送请求,收到的Response将会是一份由fetchJSON_comment98vv1587()包裹着的包含json数据的String,我们用正则表达式将json数据提取出来,然后对json数据进行解析并获取想要字段的数据即可。

代码实现

首先根据网页控制台的信息定义相关必要的变量:

url='https://club.jd.com/comment/productPageComments.action'

QueryStringParameters={ 'callback':'fetchJSON_comment98vv1587',
       'productId':'7029545',
       'score':0,
       'sortType':5,
       'page':0,
       'pageSize':10,
       'isShadowSku':0,
       'fold':1 }

需要注意的是这里的url并不是直接将控制台显示的url全部拿过来,而是只要其前一部分,因为如果用控制台上的url,则只能获取到当前页面的评论,我们想要获取全部的评论,所以必须动态变化url,这里我们将url分为两部分写,这样方便后面调整page以获取不同页面的评论。
然后实现爬取数据的逻辑代码:

hotcomments = []
while(True):
    t=s.get(url,params=data).text #模拟网页发送请求并接收返回数据

    try:
        t=re.search(r'(?<=fetchJSON_comment98vv1587\().*(?=\);)',t).group(0)#使用正则表达式匹配‘fetchJSON_comment98vv1587’
    except Exception as e:
        break
    j=json.loads(t) #解析json

    commentSummary=j['comments']
    flag=0
    for comment in commentSummary:
        flag=1
        num=num+1
        item = {
            'content': comment['content'] ,
            'nickname': comment['nickname'],
            'score': comment['score'],
            'creationTime':comment['creationTime'],
            'productColor':comment['productColor']
        }
        hotcomments.append(item)
    if flag==0:
        break
    data['page']+=1  #改变page字段,下一次循环爬取下一页评论

当以上当以上代码执行完成之后就可以将所有评论信息放在 hotcomments中,然后就可以从中拿取数据进行分析了。

使用Bar进行各项指标柱状图可视化

三种不同颜色评论数量所占百分比

a= productColor.count(u'碳黑色')
b=productColor.count(u'酒红色')
c=productColor.count(u'浅金色')
d=float(a+b+c)
a=float(a/d)
b=float(b/d)
c=float(c/d)

ds = tablib.Dataset()
ds.headers = ['颜色', '评论数']

ds.append(['碳黑色',a])
ds.append(['酒红色', b])
ds.append(['浅金色', c])

bar = Bar('颜色')
bar.add('评论数量(%)', ds.get_col(0), ds.get_col(1))
bar.render('color_bar.html')

从9号到26号单天评价数量所占百分比

ds2 = tablib.Dataset()
ds2.headers = ['评价时间', '评论数']
f=0.0
for i in range(9,27):
    f=f+creationTime.count(i)

for i in range(9,27):
    ds2.append([str(i), creationTime.count(i)/f])

bar2 = Bar('评价时间(购买时间)')
bar2.add('评论数量(%)', ds2.get_col(0), ds2.get_col(1))
bar2.render('time_bar.html')

不同评分所占百分比

ds3 = tablib.Dataset()
ds3.headers = ['评分', '评论数']
e=0.0
for i in range(0,6):
    j=5-i
    e+=score.count(j)


for i in range(0,6):
    j=5-i
    ds3.append([str(j), score.count(j)/e])

bar3 = Bar('评分')
bar3.add('评论数量(%)', ds3.get_col(0), ds3.get_col(1))
bar3.render('score_bar.html')

使用WordCloud进行评论词云可视化

content_text = " ".join(content_list)
bg_pic = imread('../WoMen_EasonChen/eason2.png')
wordcloud = WordCloud(mask=bg_pic,font_path='../Font/SourceHanSansSC-Heavy.otf',background_color='white',max_words=200).generate(content_text)
plt.figure()
plt.imshow(wordcloud,interpolation='bilinear')
plt.axis('off')
plt.show()

可视化结果

这里写图片描述
从图中可以看出,大部分用户比较喜欢碳黑色(74.38%),购买浅金色的用户最少,约占5%
这里写图片描述
可以看到95%的用户都给出了5分好评
这里写图片描述

最后看一下词云显示的内容

这里写图片描述
在给一张:
这里写图片描述

后记

坚果3刚发布的时候在网上可以看到很多人在黑他,罗老师也毫不客气地表示“拉黑”这些锤黑,本人不是锤粉也不是锤黑,只是觉得中国像罗老师这样天生骄傲的企业家不多了,就像罗振宇老师说的希望罗永浩成功那样,我也希望罗老师成功,因为中国需要这么一个天生骄傲的企业家,希望罗老师会是下一个乔布斯甚至超越乔布斯,期待锤子科技515可以创造传奇。

猜你喜欢

转载自blog.csdn.net/qq_36982160/article/details/80106689