![46e734ab4f6090b332ca269adf265a50.png](https://i-blog.csdnimg.cn/blog_migrate/466893b37378b120054f0661b35083c6.jpeg)
7 月 4 日,林丹在微博上宣布了自己退役的消息,7 月 6 日,林丹出轨女主赵雅淇发文诉委屈,先简单看一下他们发的微博。
![c64a117a70890b3a691544d3438478e6.png](https://i-blog.csdnimg.cn/blog_migrate/cbac6f2a2e3fd60af1140d5871bec5d5.jpeg)
![ddea0d46c225dbb2b336751c187fb409.png](https://i-blog.csdnimg.cn/blog_migrate/95c19f6d0432e737c973816b7ea70ed3.jpeg)
对于他们的微博内容,这里不做评价,我们使用 Python 爬取他们所发微博下面的评论信息,看看网友都说了些什么。
爬取
爬取之前,先简单了解一下微博,微博主要有如下三种展示形式:
- 网页版(http://weibo.com)
- 手机端(http://m.weibo.cn)
- 移动端(http://weibo.cn)
其中移动端爬取相对容易一些,这里我们就从移动端下手,首先在浏览器上输入 http://weibo.cn
打开,如下图所示:
![67abb325963a759fac9e709e3ec12fc1.png](https://i-blog.csdnimg.cn/blog_migrate/6d29650344562c2b33b5a8793cf2b549.png)
我们可以看到有一个搜索框,我们可以通过它来找人,以林丹为例,我们在搜索框输内入林丹之后点击找人
按钮,就可以搜到林丹的微博了,如下图所示:
![0c281c226cd0deaa64271199fa9f1c36.png](https://i-blog.csdnimg.cn/blog_migrate/c037f298dcb477798ce72313768aca73.png)
我们点击其微博名进入微博主页,如下图所示:
![1155a4eeebb1b9e5f37563064cb19e10.png](https://i-blog.csdnimg.cn/blog_migrate/955b772a966c3df00b2b9a4e6af588e9.jpeg)
接着打开开发者工具并选择 Network
,然后点击评论
,如下图所示:
![e11b99be1bc0012e7c0d28ace0a0b39a.png](https://i-blog.csdnimg.cn/blog_migrate/8333b55d234fdefc955051e9598183a5.png)
因为评论内容较多,查看更多内容是需要翻页的,我们将页面向下拉,可以看到翻页按钮,我们点下页
看一下其具体请求,如下图所示:
![a7dcaa5de93acc34d0cd3c8f870b3f5d.png](https://i-blog.csdnimg.cn/blog_migrate/500ce0de9fb759aafb063f9c1165ed73.jpeg)
上图中的 Request URL
中的 page 参数前面是固定的,page 是页号,爬取时我们需要用到的就是这个 URL,除此之外,我们还需要用到 cookie
和 user-agent
参数,在下面的 Request Headers
中就可找到,如下图所示:
![10e9dbacdaaddc1f0848885d4d46f3cb.png](https://i-blog.csdnimg.cn/blog_migrate/24f556ff78e4a1957147fdd0118801a2.jpeg)
需要用的东西找齐了之后,我们就可以爬取评论了,主要代码实现如下:
# 爬取一页评论内容
def get_one_page(url):
headers = {
'User-agent' : '自己的User-agent',
'Host' : 'weibo.cn',
'Accept' : 'application/json, text/plain, */*',
'Accept-Language' : 'zh-CN,zh;q=0.9',
'Accept-Encoding' : 'gzip, deflate, br',
'Cookie' : '自己的Cookie',
'DNT' : '1',
'Connection' : 'keep-alive'
}
# 获取网页 html
response = requests.get(url, headers = headers, verify=False)
# 爬取成功
if response.status_code == 200:
# 返回值为 html 文档,传入到解析函数当中
return response.text
return None
# 解析保存评论信息
def save_one_page(html):
comments = re.findall('<span class="ctt">(.*?)</span>', html)
for comment in comments[1:]:
result = re.sub('<.*?>', '', comment)
if '回复@' not in result:
with open('ld_comment.txt', 'a+', encoding='utf-8') as fp:
fp.write(result)
最终,我们将评论信息爬取后存到了 txt 文件中。
词云展示
接下来我们将网友评论信息做成词云看一下,词云之前我们也做过,这里不再多说,看一下主要的代码实现:
def jieba_():
stop_words = []
with open('stop_words.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
for line in lines:
stop_words.append(line.strip())
content = open('ld_comment.txt', 'rb').read()
# jieba 分词
word_list = jieba.cut(content)
words = []
for word in word_list:
if word not in stop_words:
words.append(word)
global word_cloud
# 用逗号隔开词语
word_cloud = ','.join(words)
def cloud():
# 打开词云背景图
cloud_mask = np.array(Image.open('bg1.png'))
# 定义词云的一些属性
wc = WordCloud(
# 背景图分割颜色为白色
background_color='white',
# 背景图样
mask=cloud_mask,
# 显示最大词数
max_words=200,
# 显示中文
font_path='./fonts/simhei.ttf',
# 最大尺寸
max_font_size=40
)
global word_cloud
# 词云函数
x = wc.generate(word_cloud)
# 生成词云图片
image = x.to_image()
# 展示词云图片
image.show()
# 保存词云图片
wc.to_file('ld.png')
我们先来看一下用林丹微博评论生成的词云图,如下所示:
![7ba9078882ffc4097502bfaeace7e9a9.png](https://i-blog.csdnimg.cn/blog_migrate/91acf86f9375e96c1d65524af67d022d.jpeg)
再来看一下用赵雅淇微博评论生成的词云图,如下所示:
![2f6de64d6806c4f4e470396db8e7f902.png](https://i-blog.csdnimg.cn/blog_migrate/d9264cc6ffbdabc28922533b3b654309.jpeg)
最后,我们看一下林、赵的所有评论生成的词云图,如下所示:
![b15f96993ef0176868e385b26123a824.png](https://i-blog.csdnimg.cn/blog_migrate/8e1745afb13ba5e3ecf574f051a64b03.jpeg)
![a9a04edd1102f3dffd958573d00ff651.png](https://i-blog.csdnimg.cn/blog_migrate/a1aa3ae431140c552559d089f71728b2.png)