看到网上充斥着很多词云分析的资料,今天心血来潮,也尝试下词云分析。最近热火的《创造101》,杨超越小姐姐一直在风口浪尖,因此这里借用小姐姐的微博数据做分析。

一、准备工具

作词云分析主要用到两个工具:

jieba,俗称结巴,中文分词工具;

wordcloud,词云生成工具。可以先用pip安装这两个库。

二、分析

首先打开移动端 https://m.weibo.cn/searchs,在里边找到小姐姐的微博主页,分析浏览器的请求。

新浪微博应用的是Ajax渲染方式,因此若要准确分析数据需要提取出Ajax请求,Ajax的请求类型为XHR,如图getIndex前缀的都是Ajax请求,查看其Request URL, 观察到获取微博数据的的接口是 https://m.weibo.cn/api/container/getIndex。仔细观察这个URL参数:

发现其中有一些固定参数在不同请求中是恒定不变的,同时也有一些加密参数,page是翻页参数。在response选项卡中查看这个借口返回的数据,发现是JSON字典类型,在JSON.cn中进行在线转化:

total是微博总条数,page是页数,每10条微博为一页,每一条微博都被封装在cards数组中,具体内容在text标签里。

三、构造请求头

分析完网页,我们用requests模拟浏览器来获取数据,因为不需要登陆就可以查看小姐姐的微博,因此这里不需要准备cookies。应用以上分析得到的参数构建请求头:

headers = {"Host": "m.weibo.cn","Referer": "https://m.weibo.cn/u/5644764907","User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) ""Version/9.0 Mobile/13B143 Safari/601.1",
}
url = "https://m.weibo.cn/api/container/getIndex"
params = {"uid": "{uid}","luicode": "10000011","type": "uid","value": "5644764907","containerid": "{containerid}","page": "{page}"}

四、构造简单爬虫

通过返回的数据能查询到总微博条数 total,爬取数据直接利用 requests 提供的方法把 json 数据转换成 Python 字典对象,从中提取出所有的 text 字段的值并放到 blogs 列表中,提取文本之前进行简单过滤,去掉无用信息。顺便把数据写入文件,方便下次转换时不再重复爬取。

同时,在这里准备一个由常见连接词组成的“结巴关键语录”,里边存放“你、我、他、虽然、但是”等连接词,用这个语录对微博语句进行断句。

同时,准备好词云背景图,这个背景图除了图案背景最好是白色。

通过hsl函数来决定生成词云的颜色。

def grey_color_func(word, font_size, position, orientation, random_state=None,**kwargs):s = "hsl(10, %d%%, %d%%)" % (random.randint(200, 255),random.randint(10, 55))   #色相、饱和度、明度print(s)return s

五、效果图

哈哈哈,结果出来了,是不是很开心!发现小姐姐提到较多的关键字是好看、超越、抖音......

六、原始代码

# -*- coding:utf-8 -*-
import codecs
import re
import random
import imageio
import jieba.analyse
import matplotlib.pyplot as plt
import requests
from wordcloud import WordCloud__author__ = 'Slash'headers = {"Host": "m.weibo.cn","Referer": "https://m.weibo.cn/u/5644764907","User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) ""Version/9.0 Mobile/13B143 Safari/601.1",
}def clean_html(raw_html):pattern = re.compile(r'<.*?>|转发微博|//:|Repost|,|?|。|、|分享图片|回复@.*?:|//@.*')text = re.sub(pattern, '', raw_html)return texturl = "https://m.weibo.cn/api/container/getIndex"
params = {"uid": "{uid}","luicode": "10000011","type": "uid","value": "5644764907","containerid": "{containerid}","page": "{page}"}def fetch_data(uid=None, container_id=None):"""抓取数据,并保存到CSV文件中:return:"""page = 0total = 331blogs = []for i in range(0, total // 10):params['uid'] = uidparams['page'] = str(page)params['containerid'] = container_idres = requests.get(url, params=params, headers=headers)cards = res.json().get("data").get("cards")for card in cards:# 每条微博的正文内容if card.get("card_type") == 9:text = card.get("mblog").get("text")text = clean_html(text)blogs.append(text)page += 1print("抓取第{page}页,目前总共抓取了 {count} 条微博".format(page=page, count=len(blogs)))with codecs.open('weibo.txt', 'a', encoding='utf-8') as f:f.write("\n".join(blogs))def grey_color_func(word, font_size, position, orientation, random_state=None,**kwargs):s = "hsl(10, %d%%, %d%%)" % (random.randint(200, 255),random.randint(10, 55))   #色相、饱和度、明度print(s)return sdef generate_image():data = []jieba.analyse.set_stop_words("./stopwords.txt")with codecs.open("weibo.txt", 'r', encoding="utf-8") as f:for text in f.readlines():data.extend(jieba.analyse.extract_tags(text, topK=20))data = " ".join(data)mask_img = imageio.imread('./bg.jpg')wordcloud = WordCloud(font_path='./WenQuanZhengHei-1.ttf',background_color='white',mask=mask_img).generate(data)plt.title('Yangchaoyue',fontsize='large')plt.imshow(wordcloud.recolor(color_func=grey_color_func, random_state=3),interpolation="bilinear")   #双线性差值plt.imshow(wordcloud, interpolation="bilinear")plt.axis('off')plt.savefig('./yang.jpg', dpi=1600)if __name__ == '__main__':fetch_data("5644764907", "1076035644764907")generate_image()

NO.16——Pathon爬取杨超越新浪微博数据做词云分析相关推荐

  1. Python爬虫——selenium爬取网易云评论并做词云

    大家好!我是霖hero 到点了上号网易云,很多人喜欢到夜深人静的时候,在网易云听音乐发表评论,正所谓:自古评论出人才,千古绝句随口来,奈何本人没文化,一句卧槽行天下!评论区集结各路大神,今天我们来爬取 ...

  2. python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  3. 用Python爬取B站弹幕并做成词云

    用Python爬取B站弹幕并做成词云 一.获取视频的cid号 1.进入想爬的视频,打开浏览器设置里的"开发者工具": 进入NetWork后等待requests刷出,数据够了后可随意 ...

  4. Python入门--爬取淘宝评论并生成词云

    Python爬取淘宝评论并生成词云 最新修改于2021/04/01 所需相关Python第三方库(目前最新版本即可) 推荐使用Anaconda,其使用十分方便.快捷. requests库 json库 ...

  5. 爬取《政府工作报告》词云展示并做词频统计

    爬取<政府工作报告>词云展示并做词频统计 爬取<政府工作报告内容代码: from requests import * from bs4 import BeautifulSoup r= ...

  6. python爬携程上出境游数据_python爬取携程旅游评价信息词云图分析

    python爬取携程旅游评价信息词云图分析 前言 前面咱们已经分析过如何爬取携程旅游的相关信息,如果没有看过的,可以先跳转看一下前面的那篇博客:python 爬虫 一键爬取携程旅游团数据 这一篇呢,咱 ...

  7. 爬取复仇者联盟4豆瓣短评生成词云

    Python在众多编程语言中有着很多强大的依赖库支持,能用很简短的代码完成很复杂的事情. 最近复仇者联盟4非常火爆,而且口碑炸裂.因此,作者运用Python对此电影做了一些简单的分析.分析的具体流程如 ...

  8. 爬取B站视频弹幕生成词云

    效果预览 以B站UP主可乐三太火影1-720集解说视频2020-08-07弹幕爬取为例,生成词云 代码 # -*- coding: utf-8 -*- # @Time : 2020/8/8 22:11 ...

  9. 看看你爱的他今天是什么‘颜色‘ -- Python爬取微博评论制作专属偶像词云

    简介:快来拿出你珍藏的pick star,用大家对他的爱重塑一个他吧.通过爬取微博评论,制作你的偶像图片词云,天天都是不重样的哦! 很多人学习python,不知道从何学起. 很多人学习python,掌 ...

最新文章

  1. python使用openpyxl读取数据_Python-openpyxl读取和写入数据1
  2. POJ C程序设计进阶 编程题#3:运算符判定
  3. ROS探索总结(七)(八)(九)——smartcar源码上传 键盘控制 操作杆控制
  4. px,em,rem,vw单位在网页和移动端的应用
  5. 第一节:什么是ES6?新手该如何理解
  6. 面试:Websocket
  7. 头条搜索回应百度:不交钱也会保护品牌词搜索
  8. 通过寄生组合式继承创建js的异常类
  9. 《算法的乐趣》终于出版了
  10. Arduino与Proteus仿真实例-AD5242数字电位器驱动仿真
  11. 【智能家居】空调遥控器破解
  12. 没有学历,四步进Google
  13. “中国童装之都”牵手九州云,共建智慧园区促产业转型
  14. 上网的时候总是掉线?该如何处理
  15. python修改二进制文件_python二进制修改bcwav文件
  16. php技术座右铭,100句激励自己的座右铭
  17. MYSQL JDBC图书管理系统
  18. Smartbi电子表格_零编码做报表
  19. linux怎么用ping通测试连接,ping网络是否连通的步骤_使用ping命令检查网络连通性的方法-系统城...
  20. RayMarching实现体积光渲染

热门文章

  1. AJAX、Json介绍
  2. 【SQL server 期末复习】
  3. 台前与幕后的5G战争
  4. On Smoothness of a Vector Field-Application to Optical Flow
  5. 面试了一位 阿里出来的46 岁的程序员,思绪万千,最后结局居然...
  6. 【二维数组】方阵主对角线元素对换
  7. 在windows 中使用cmd查看连接过的WIFI密码
  8. 硬盘分区怎么分?新手该如何操作?
  9. 万字长文,带你入门异步编程
  10. AOSP 源代码标记和 build