本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于菜鸟学Python数据分析 ,作者小dull鸟

前言

如今,关于iPhone12和华为mate40哪个好的争论不断,新浪科技发布一条关于“iPhone12和华为Mate40你选谁?”的投票,结果如下:

 

通过上图可以看出,选华为的占56%,选苹果的占23.74%,还有11%的人都不选、4%的人看到实物再选、5%的人都想要

为了进一步挖掘数据,我爬了该条微博的评论数据,并制作词云图,看看大家都在说什么

 

具体步骤如下:

1.分析微博评论数据接口

在微博移动端打开该条微博(因为移动端数据相对好爬),抓包获取数据接口:

 

返回的数据接口为json格式

再来看看url规律,第1、2、3页评论数据的url分别为:

1.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id_type=0
2.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id=140496174237721&max_id_type=0
3.https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id=139259223284570&max_id_type=0

我们可以发现,除了第一页格式唯一,其他的都相对固定,且id和mid的参数值固定,变化的为max_id参数

经过分析,当页的max_id参数在上一页的返回数据中,例如,第二页的max_id在第一页的返回数据中:

 

2.写爬虫代码

这里要注意一点,爬虫中要加入登录后的cookie值,否则只能返回第一页数据,具体代码如下:

import requests
import json
import re
import pandas as pd
url='https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id_type=0'
headers={'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0'}
cookie={'Cookie':'换成自己的cookie'}
comments=[]
for i in range(50):
    response=requests.get(url,headers=headers,cookies=cookie)
    results=json.loads(response.text)
    max_id=results['data']['max_id']
    datas=results['data']['data']
    patter=re.compile(r'(.*?)<',re.S)
    for data in datas:
        if '<' in data['text']:
            text=re.findall(patter,data['text'])[0]
        else:
            text=data['text']
        comments.append(text)
    url='https://m.weibo.cn/comments/hotflow?id=4559868490418275&mid=4559868490418275&max_id={0}&max_id_type=0'.format(max_id)

结果如下:

 

3.将评论数据连成字符

content=''.join(comments)

4.使用jieba分词,去除单个字符和换行符

segment = []
segs = jieba.cut(content)   # 使用jieba分词
for seg in segs:
    if len(seg) > 1 and seg != 'rn':
        segment.append(seg)

5.对文本去噪

words_df = pd.DataFrame({'segment': segment})
words_df.head()
stopwords = pd.read_csv("stopword.txt", index_col=False,
                            quoting=3, sep='t', names=['stopword'], encoding="utf8")
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]

这一步主要是把没用的词语和词语去除掉,‘stop.txt’获取方式在文末

6.对剩下的词语按组计算个数,并按个数大小进行排序

words_stat = words_df.groupby('segment').agg(count=pd.NamedAgg(column='segment', aggfunc='size'))
words_stat = words_stat.reset_index().sort_values(by="count", ascending=False)

7.自定义词云背景,设置字体样式

bimg = imread('mangguo.jpg')
wordcloud = WordCloud(background_color="white", mask=bimg, font_path='AdobeHeitiStd-Regular.otf')
wordcloud = wordcloud.fit_words(dict(words_stat.head(990000).itertuples(index=False)))

这一步若出错,请把font换成电脑中已有的字体

8.从背景图片生成颜色值

bimgColors = ImageColorGenerator(bimg)
plt.axis("off")
plt.imshow(wordcloud.recolor(color_func=bimgColors))

9.生成词云图

wordcloud.to_file("iphoneVShuawei.png")

10.成果图

 

从词云图中可以看出,大家还是比较支持华为的,同时还有不少人表示都太贵、买不起。

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/hhh188764/p/13863675.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!