前段时间为“周杰伦打榜”话题迅速登上微博热搜榜 由于cxk的粉丝们质疑周杰伦微博没有数据 (周杰伦没有开通微博) 因而,无数隐匿江湖多年 看不下去的周杰伦老年粉开始被迫营业 html
iKun们都说周杰伦的粉丝是夕阳红老年团 python
用爬虫爬取#周杰伦超话#
下的微博,而后再爬取他们的我的主页信息,获取年龄、地区、性别等信息,而后用数据分析,再可视化呈现!git
注意:文中说的微博我的主页信息均为微博公开信息,不包含任何隐私信息,同时全文中将不会出现任何人的我的信息,信息仅用于学习分析,任何人不得使用此教程用做商用,违者后果自付!github
咱们大概分解下技术步骤,以及使用的技术chrome
#周杰伦超话#
下的微博爬取数据咱们可使用requests库
,保存csv文件咱们可使用内置库csv
,而可视化数据分析此次给你们介绍一个超级好用的库pyecharts
,技术选型好了以后咱们就能够开始技术实现了!json
咱们在谷歌浏览器(chrome)中找到#周杰伦超话#
页面,而后调出调试窗口,改成手机模式,而后过滤请求,只查看异步请求,查看返回数据格式,找到微博内容所在! api
拿到连接咱们就能够模拟请求,这里咱们仍是使用咱们熟悉的requests库
。简单几句即可以获取微博! 浏览器
咱们能够看到返回的数据是一个json格式的,咱们一层一层寻找,就能够找到微博内容、用户id所在! cookie
在咱们提取一条微博以后,咱们即可以批量爬取微博啦,如何批量?固然是要分页了?那如何分页,这里猪哥再教你们一遍寻找分页参数技巧:数据结构
查找分页参数技巧:比较第一次和第二次请求url,看看有何不一样,找出不一样的参数!给你们推荐一款文本比较工具:Beyond Compare
比较两次请求的URL发现,第二次比第一次请求连接中多了一个:since_id
参数,而这个since_id参数就是每条微博的id!
微博分页机制:根据时间分页,每一条微博都有一个since_id,时间越大的since_id越大因此在请求时将since_id传入,则会加载对应话题下比此since_id小的微博,而后又从新获取最小since_id将最小since_id传入,依次请求,这样便实现分页
了解微博分页机制以后,咱们就能够制定咱们的分页策略:咱们将上一次请求返回的微博中最小的since_id做为下次请求的参数,这样就等于根据时间倒序分页抓取数据!
# 批量爬取
for i in range(1000):
print('第%d页' % (i + 1))
spider_topic()
复制代码
批量爬取微博搞定以后,咱们就能够开始爬取用户信息啦!
首先咱们得了解,用户基本信息页面的连接为:weibo.cn/用户id/info,我…喜欢唱、跳、rap还有篮球的同窗主页为例子!
回顾咱们以前分析的微博数据格式,发现其中便有咱们须要的用户id!
咱们获取到用户id以后,只要请求weibo.cn/用户id/info 这个url就能够获取公开信息了,可是查看别人用户主页是须要登陆的,那咱们就先用代码模拟登陆!
咱们以前爬取豆瓣的时候,已经教过你们如何模拟登陆了,这里就直接放出代码!
拿到用户id又登陆以后,就能够开始爬取用户公开信息啦!
微博信息拿到了、用户信息也拿到了,那咱们就把这些数据保存起来,方便后面作数据分析!
咱们以前一直是保存txt格式的,由于以前都是只有一项数据,而此次是多项数据(微博内容、用户名、地区、年龄、性别等),因此选择CSV(Comma Separated Values逗号分隔值)格式的文件!
数据保存下来以后咱们就能够进行数据分析了,首先咱们要知道咱们须要分析哪些数据?
由于咱们保存的数据格式为:'用户id', '用户名', '性别', '地区', '生日', '微博id', '微博内容',的不少行,而如今作数据分析须要获取指定的某一列,好比:性别列,因此咱们须要封装一个方法用来读取指定的列!
Counter
类来统计词频,方便后面数据分析,他返回的格式为:{'女': 1062, '男': 637}。
在咱们分析以前,有一件很重要的事情,那就是选择一个合适可视化库!你们都知道Python可视化库很是多,以前咱们一直在用matplotlib库
作词云,matplotlib作一些简单的绘图很是方便。可是今天咱们须要作一个全国分布图,因此通过猪哥对比筛选,选择了国人开发的pyecharts库
。选择这个库的理由是:开源免费、文档详细、图形丰富、代码简介,用着就是一个字:爽!
po一张他们的官方文档图片
选择了可视化库以后,咱们就来使用吧!
这一项是你们比较关心的,真的是夕阳红粉丝团吗?
下面咱们来看看打榜粉丝全国各省的分布状况!
咱们来看看这些打榜的粉丝们都在说什么!
看来打榜粉丝们都自认为本身是老年人,哈哈哈!
从结果来说为周杰伦打榜的粉丝主力军仍是80、90后,毕竟曾经的青春啊,并且女生要比男生多,打榜粉丝最多的地区为广东!
从技术分析今天这个例子有很多的新东西,了解新浪微博分页机制、爬取用户公开信息、使用csv库保存文件、使用pyecharts作数据可视化!
固然中间遇到了不少问题,只有本身亲自尝试才会知道,猪哥已经把源码放在github(github.com/pig6/sina_t… 或点击 阅读原文)中,感兴趣的同窗记得转发收藏有时间的时候尝尝鲜!