python爬取微博数据词云_Python爬取微博数据生成词云图片

很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何人的微博数据都可以制作出来,即使是小白也能分分钟做出来 。
准备工作
本环境基于,理论上.7也是可行的,先安装必要的第三方依赖包:# .==0.38
==2.0.2
numpy==1.13.1
==2.2.0
==2.18.4
scipy==0.19.1
==1.3.1
.txt文件中包含上面的几个依赖包,如果用pip方式安装失败,推荐使用安装pip-r .txt
第一步:分析网址
打开微博移动端网址,找到女神的微博ID,进入她的微博主页,分析浏览器发送请求的过程
打开浏览器的调试功能,选择菜单,观察到获取微博数据的的接口是,后面附带了一连串的参数,这里面有些参数是根据用户变化的,有些是固定的,先提取出来 。uid=&
=&
lfid=%3D3%26q%3D%E6%9D%8E%E5%86%B0%E5%86%B0&
=&type=user&
=15960
再来分析接口的返回结果,返回数据是一个JSON字典结构,total 是微博总条数,每一条具体的微博内容封装在 cards 数组中,具体内容字段是里面的 text 字段 。很多干扰信息已隐去 。{ "": { "": "15960", "total": 4754, "page": 2
}, "cards": [
{ "": 9, "mblog": { "": "08-26", "idstr": "46080", "text": "瑞士一日游圆满结束...",
}]
第二步:构建请求头和查询参数
分析完网页后,我们开始用模拟浏览器构造爬虫获取数据,因为这里获取用户的数据无需登录微博,所以我们不需要构造 信息,只需要基本的请求头即可,具体需要哪些头信息也可以从浏览器中获取,首先构造必须要的请求参数,包括请求头和查询参数 。

python爬取微博数据词云_Python爬取微博数据生成词云图片

文章插图
= { "Host": "", "": "", "User-Agent": "/5.0 (; CPUOS 9_1 like Mac OS X) /601.1.46 (KHTML, like Gecko) "
"/9.0 / /601.1",
= {"uid": "{uid}", "": "", "": "", "type": "uid", "value": "", "": "{}", "page": "{page}"}uid是微博用户的id
虽然不什么意思,但也是和具体某个用户相关的参数
page 分页参数
第三步:构造简单爬虫
通过返回的数据能查询到总微博条数 total,爬取数据直接利用提供的方法把 json 数据转换成字典对象,从中提取出所有的 text 字段的值并放到 blogs 列表中,提取文本之前进行简单过滤,去掉无用信息 。顺便把数据写入文件,方便下次转换时不再重复爬取 。def (uid=None, =None):
"""
抓取数据,并保存到CSV文件中
::
"""
page = 0
total = 4754
blogs = [] for i in range(0, total // 10):
['uid'] = uid
['page'] = str(page)
[''] =
res = .get(url, =, =)
cards = res.json().get("cards") for card in cards: # 每条微博的正文内容
if card.get("") == 9:
text = card.get("mblog").get("text")
text = (text)
blogs.(text)
python爬取微博数据词云_Python爬取微博数据生成词云图片

文章插图
page += 1
print("抓取第{page}页,目前总共抓取了 {count} 条微博".(page=page, count=len(blogs))) with .open('.txt', 'w', ='utf-8') as f:
f.write("\n".join(blogs))
第四步:分词处理并构建词云
爬虫了所有数据之后,先进行分词,这里用的是结巴分词,按照中文语境将句子进行分词处理,分词过程中过滤掉停止词,处理完之后找一张参照图,然后根据参照图通过词语拼装成图 。def ():
data = http://www.kingceram.com/post/[]
jieba..("./.txt") with .open(".txt", 'r', ="utf-8") as f: for text in f.():
data.(jieba..(text, topK=20))
datahttp://www.kingceram.com/post/= " ".join(data)