前段时间为“周杰伦打榜”话题迅速登上微博热搜榜
因为cxk的粉丝们质疑周杰伦微博没有数据
(周杰伦没有开通微博)
于是,无数隐匿江湖多年
看不下去的周杰伦老年粉开始被迫营业
于是一场周杰伦中老年粉VS蔡徐坤铁军
微博打榜大战拉响
为听了那么多年的周杰伦
粉丝们纷纷拉下老脸
和00后的微博饭圈小年轻们
从零学习如何做数据
一、需求背景
iKun们都说周杰伦的粉丝是夕阳红老年团
今天我们就用他们说的数据,来实力打脸,让iKun们看看周杰伦的粉丝们到底是不是中老年粉! 二、功能描述
用爬虫爬取#周杰伦超话#下的微博,然后再爬取他们的个人主页信息,获取年龄、地区、性别等信息,然后用数据分析,再可视化呈现!
注意:文中说的微博个人主页信息均为微博公开信息,不包含任何隐私信息,同时全文中将不会出现任何人的个人信息,信息仅用于学习分析,任何人不得使用此教程用作商用,违者后果自付!
三、技术方案我们大概分解下技术步骤,以及使用的技术
爬取#周杰伦超话#下的微博
根据每条微博爬取该用户基本信息
将信息保存到csv文件
使用数据分析用户年龄、性别分布
分析粉丝团的地区分布
使用词云分析打榜微博内容
爬取数据我们可以使用requests库,保存csv文件我们可以使用内置库csv,而可视化数据分析这次给大家介绍一个超级好用的库pyecharts,技术选型好了之后我们就可以开始技术实现了!
四、爬取超话微博 1.找到超话加载数据URL我们在谷歌浏览器(chrome)中找到#周杰伦超话#页面,然后调出调试窗口,改为手机模式,然后过滤请求,只查看异步请求,查看返回数据格式,找到微博内容所在!
微博请求链接:https://m.weibo.cn/api/container/getIndex?jumpfrom=weibocom&containerid=1008087a8941058aaf4df5147042ce104568da_-_feed 2.代码模拟请求数据
拿到链接我们就可以模拟请求,这里我们还是使用我们熟悉的requests库。简单几句便可以获取微博!
我们可以看到返回的数据是一个json格式的,我们一层一层寻找,就可以找到微博内容、用户id所在!
了解微博返回的数据结构之后我们就可以将微博内容和id提取出来啦!
4.批量爬取微博
在我们提取一条微博之后,我们便可以批量爬取微博啦,如何批量?当然是要分页了?那如何分页,这里猪哥再教大家一遍寻找分页参数技巧:
查找分页参数技巧:比较第一次和第二次请求url,看看有何不同,找出不同的参数!给大家推荐一款文本比较工具:Beyond Compare
比较两次请求的URL发现,第二次比第一次请求链接中多了一个:since_id参数,而这个since_id参数就是每条微博的id!
微博分页机制:根据时间分页,每一条微博都有一个since_id,时间越大的since_id越大所以在请求时将since_id传入,则会加载对应话题下比此since_id小的微博,然后又重新获取最小since_id将最小since_id传入,依次请求,这样便实现分页
了解微博分页机制之后,我们就可以制定我们的分页策略:我们将上一次请求返回的微博中最小的since_id作为下次请求的参数,这样就等于根据时间倒序分页抓取数据!
然后写一个for循环调用上面那个方法就可以啦 # 批量爬取 for i in range(1000): print('第%d页' % (i + 1)) spider_topic() 四、爬取用户信息
批量爬取微博搞定之后,我们就可以开始爬取用户信息啦!
首先我们得了解,用户基本信息页面的链接为:https://weibo.cn/用户id/info,我们以某**喜欢唱、跳、rap还有篮球**的同学主页为例子!
所以我们只要获取到用户的id就可以拿到他的公开基本信息! 1.获取用户id