python爬取微博数据词云_用Python爬取微博数据生成词云图片
原标题:用Python爬取微博数据生成词云图片
欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,放在今天应该比较应景。
一年一度的虐汪节,是继续蹲在角落默默吃狗粮还是主动出击告别单身汪加入散狗粮的行列就看你啦,七夕送什么才有心意,程序猿可以试试用一种特别的方式来表达你对女神的心意。有一个创意是把她过往发的微博整理后用词云展示出来。本文教你怎么用Python快速创建出有心意词云,即使是Python小白也能分分钟做出来。 准备工作
本环境基于Python3,理论上Python2.7也是可行的,先安装必要的第三方依赖包:
# requirement.txt jieba==
0.38 matplotlib==
2.0
.2 numpy==
1.13
.1 pyparsing==
2.2
.0 requests==
2.18
.4 scipy==
0.19
.1 wordcloud==
1.3
.1
requirement.txt文件中包含上面的几个依赖包,如果用pip方式安装失败,推荐使用Anaconda安装 pip
install -r requirement.txt 第一步:分析网址
打开微博移动端网址 https://m.weibo.cn/searchs ,找到女神的微博ID,进入她的微博主页,分析浏览器发送请求的过程
打开 Chrome 浏览器的调试功能,选择 Network 菜单,观察到获取微博数据的的接口是 https://m.weibo.cn/api/container/getIndex ,后面附带了一连串的参数,这里面有些参数是根据用户变化的,有些是固定的,先提取出来。 uid=
1192515960& luicode=
10000011& lfid=
100103type
%3D3
%26q
%3D
%E6
%9D
%8E
%E5
%86
%B0
%E5
%86
%B0& featurecode=
20000320& type=user& containerid=
1076031192515960
再来分析接口的返回结果,返回数据是一个JSON字典结构,total 是微博总条数,每一条具体的微博内容封装在 cards 数组中,具体内容字段是里面的 text 字段。很多干扰信息已隐去。
{
"cardlistInfo"
:
{
"containerid"
:
"1076031192515960"
,
"total"
:
4754
,
"page"
:
2
},
"cards"
:
[
{
"card_type"
:
9
,
"mblog"
:
{
"created_at"
:
"08-26"
,
"idstr"
:
"4145069944506080"
,
"text"
:
"瑞士一日游圆满结束..."
,
}
}]
} 第二步:构建请求头和查询参数
分析完网页后,我们开始用 requests 模拟浏览器构造爬虫获取数据,因为这里获取用户的数据无需登录微博,所以我们不需要构造 cookie信息,只需要基本的请求头即可,具体需要哪些头信息也可以从浏览器中获取,首先构造必须要的请求参数,包括请求头和查询参数。
headers
=
{
"Host"
:
"m.weibo.cn"
,
"Referer"
:
"https://m.weibo.cn/u/1705822647"
,
"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"
,
}
params
=
{
"uid"
:
"{uid}"
,
"luicode"
:
"20000174"
,
"featurecode"
:
"20000320"
,
"type"
:
"uid"
,
"value"
:
"1705822647"
,
"containerid"
:
"{containerid}"
,
"page"
:
"{page}"
}
uid是微博用户的id
containerid虽然不什么意思,但也是和具体某个用户相关的参数
page 分页参数 第三步:构造简单爬虫
通过返回的数据能查询到总微博条数 total,爬取数据直接利用 requests 提供的方法把 json 数据转换成 Python 字典对象,从中提取出所有的 text 字段的值并放到 blogs 列表中,提取文本之前进行简单过滤,去掉无用信息。顺便把数据写入文件,方便下次转换时不再重复爬取。
def
fetch_data
(
uid
=
None
,
container_id
=
None
):
"""
抓取数据,并保存到CSV文件中
:return:
"""
page
=
0
total
=
4754
blogs
=
[]
for
i
in
range
(
0
,
total
//
10
):
params
[
'uid'
]
=
uid
params
[
'page'
]
=
str
(
page
)
params
[
'containerid'
]
=
container_id
res
=
requests
.
get
(
url
,
params
=
params
,
headers
=
HEADERS
)
cards
=
res
.
json
()
.
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
+=
1
(
"抓取第{page}页,目前总共抓取了 {count} 条微博"
.
format
(
page
=
page
,
count
=
len
(
blogs
)))
with
codecs
.
open
(
'weibo1.txt'
,
'w'
,
encoding
=
'utf-8'
)
as
第四步:分词处理并构建词云
爬虫了所有数据之后,先进行分词,这里用的是结巴分词,按照中文语境将句子进行分词处理,分词过程中过滤掉停止词,处理完之后找一张参照图,然后根据参照图通过词语拼装成图。
def
generate_image
():
data
=
[]
jieba
.
analyse
.
set_stop_words
(
"./stopwords.txt"
)
with
codecs
.
open
(
"weibo1.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
=
imread
(
'./52f90c9a5131c.jpg'
,
flatten
=
True
)
wordcloud
=
WordCloud
(
font_path
=
'msyh.ttc'
,
background_color
=
'white'
,
mask
=
mask_img
)
.
generate
(
data
)
plt
.
imshow
(
wordcloud
.
recolor
(
color_func
=
grey_color_func
,
random_state
=
3
),
interpolation
=
"bilinear"
)
plt
.
axis
(
'off'
)
plt
.
savefig
(
'./heart2.jpg'
,
dpi
=
1600
)
最终效果图:
天善学院svip包含Excel BI、Python爬虫案例、Python机器学习、Python数据科学家、大数据、数据分析报告、数据分析师体系、深度学习、R语言案例10套课程火爆报名中,欢迎大家关注 www.hellobi.com/svip
转载请保留以下内容:
本文来源自天善社区刘志军老师的博客(公众号)。
原文链接:https://ask.hellobi.com/blog/pythoneer/9579返回搜狐,查看更多
责任编辑:
python爬取微博数据词云_用Python爬取微博数据生成词云图片相关推荐
- python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——小猿搜题
python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--小猿搜题 # 导入扩展库 import re # 正则表达式库 import collections ...
- python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——学霸君
python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--学霸君 # 导入扩展库 import re # 正则表达式库 import collections # ...
- python3 爬虫数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云——作业帮
python3 爬虫&数据处理 爬取华为应用市场 APP应用评论(二)根据评论生成词云--作业帮 # 导入扩展库 import re # 正则表达式库 import collections # ...
- python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
流浪地球影评爬取 大过年的,蹭个热度,看完电影后爬一下影评并作出词云. 本次影评取自豆瓣: https://movie.douban.com/subject/26266893/ 抓包 首先是拿到访问的 ...
- 用Python爬取豆瓣首页所有电影名称、每部电影影评及生成词云
1.爬取环境: window 7 Chrome 浏览器 注册豆瓣.注册超级鹰 2.安装第三方库:安装第三方库: 主程序用到的库有 import sys, time import pytesseract ...
- 如何使用python编程抢京东优惠券 知乎_学好Python爬取京东知乎价值数据
原标题:学好Python爬取京东知乎价值数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这 ...
- python百度贴吧怎么爬取最早的帖子_【Python爬虫教学】百度篇·手把手教你抓取百度贴吧任意贴吧指定范围页数内的源代码...
开门见山. 懒癌一犯,能拖一天是一天. 好了,亲爱的小伙伴们,我又回来了!今天带来的是抓取输入的任意贴吧,抓取指定范围页数内的源代码. 工具: 依旧是 PyCharm 和 Google 浏览器,pyt ...
- beautifulsoup爬取网页中的表格_用 Python 爬取网页
来自公众号:优达学城Udacity 作者:Kerry Parker 编译:欧剃 作为数据科学家的第一个任务,就是做网页爬取.那时候,我对使用代码从网站上获取数据这项技术完全一无所知,它偏偏又是最有逻辑 ...
- 利用python制作漂亮的词云图_利用python制作词云,wordcloud神器你值得拥有
相信许多人都看到过下面这样的词云图,词云图是一种很好的可视化工具,其作用主要是为了文本数据的视觉表示,既酷炫又能突出重点. 关于词云图的制作,网上能够搜集到很多的教程,许多都是利用了专用的工具,这些工 ...
最新文章
- Reading papers_15(Graph cuts optimization for multi-limb human segmentation in depth maps)
- ARM WFI和WFE指令
- 蒙特卡洛树搜索的主要流程有哪些_海运拼箱操作流程主要有哪些
- mysql bitmap index_[MySQL] mysql中bitmap的简单运用
- Bootstrap 的辅助类
- Java Web学习笔记09:文件上传与下载
- 把excel数据生成sql insert语句
- JAVA阻塞队列LinkedBlockingQueue 以及非阻塞队列ConcurrentLinkedQueue 的区别
- 如何进行大数据入门的学习
- react-native 修改app应用名称
- python元祖封包_python的封包与解包
- python游戏寻路_python模拟实现A*寻路算法
- 从mysql迁移数据到postgre
- 数据库复习题选择题+判断题+填空题(考试续命必备
- 一、MicroApp快速入门示例
- 写论文比较有用的网站
- C#使用NPOI操作Word表格
- 法兰盘零件机械加工工艺规程编制及加工右大斜面用铣床专用夹具设计
- 随笔 致颓废懒惰的自己 劝自己清醒振奋
- 传“谷歌金山词霸”将于近日正式推出
热门文章
- 操作系统笔记 第二章
- Cardboard Talk01 HeadTracker
- 网络虚拟化技术与NFV
- linux 按键检测 防抖,GPIO输入——按键检测
- 为什么使用计算机网络连接,为什么无线网络连接上却不能上网,教您电脑连上无线网却不能上网怎么办...
- 你的身份证,到底绑定了多少微信账号?
- vscode使用ssh连接远程Ubuntu服务器(记录)
- elementUI 表格合并单元格-多层级-合并行
- 北京大学可视化发展前沿研究生暑期学校Day6
- vs运行程序时报错:“XXX处有未经处理的异常: 0xC0000374: 堆已损坏”