爬取微博用户公开信息,分析为周杰伦打榜的夕阳红老年团,告诉你他们真实年龄!

前段时间为“周杰伦打榜”话题迅速登上微博热搜榜 由于cxk的粉丝们质疑周杰伦微博没有数据 (周杰伦没有开通微博) 因而,无数隐匿江湖多年 看不下去的周杰伦老年粉开始被迫营业 html

在这里插入图片描述
因而一场周杰伦中老年粉VS蔡徐坤铁军 微博打榜大战拉响 为听了那么多年的周杰伦 粉丝们纷纷拉下老脸 和00后的微博饭圈小年轻们 从零学习如何作数据
在这里插入图片描述

1、需求背景

iKun们都说周杰伦的粉丝是夕阳红老年团 python

在这里插入图片描述
今天咱们就用他们说的数据,来实力打脸,让iKun们看看周杰伦的粉丝们究竟是不是中老年粉!

2、功能描述

用爬虫爬取#周杰伦超话#下的微博,而后再爬取他们的我的主页信息,获取年龄、地区、性别等信息,而后用数据分析,再可视化呈现!git

注意:文中说的微博我的主页信息均为微博公开信息,不包含任何隐私信息,同时全文中将不会出现任何人的我的信息,信息仅用于学习分析,任何人不得使用此教程用做商用,违者后果自付!github

3、技术方案

咱们大概分解下技术步骤,以及使用的技术chrome

  1. 爬取#周杰伦超话#下的微博
  2. 根据每条微博爬取该用户基本信息
  3. 将信息保存到csv文件
  4. 使用数据分析用户年龄、性别分布
  5. 分析粉丝团的地区分布
  6. 使用词云分析打榜微博内容

爬取数据咱们可使用requests库,保存csv文件咱们可使用内置库csv,而可视化数据分析此次给你们介绍一个超级好用的库pyecharts,技术选型好了以后咱们就能够开始技术实现了!json

4、爬取超话微博

1.找到超话加载数据URL

咱们在谷歌浏览器(chrome)中找到#周杰伦超话#页面,而后调出调试窗口,改成手机模式,而后过滤请求,只查看异步请求,查看返回数据格式,找到微博内容所在! api

在这里插入图片描述
微博请求连接: m.weibo.cn/api/contain…

2.代码模拟请求数据

拿到连接咱们就能够模拟请求,这里咱们仍是使用咱们熟悉的requests库。简单几句即可以获取微博! 浏览器

在这里插入图片描述

3.提取微博内容

咱们能够看到返回的数据是一个json格式的,咱们一层一层寻找,就能够找到微博内容、用户id所在! cookie

在这里插入图片描述
了解微博返回的数据结构以后咱们就能够将微博内容和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()
复制代码

4、爬取用户信息

批量爬取微博搞定以后,咱们就能够开始爬取用户信息啦!

首先咱们得了解,用户基本信息页面的连接为:weibo.cn/用户id/info,我…喜欢唱、跳、rap还有篮球的同窗主页为例子!

在这里插入图片描述
因此咱们只要获取到用户的id就能够拿到他的公开基本信息!

1.获取用户id

回顾咱们以前分析的微博数据格式,发现其中便有咱们须要的用户id!

在这里插入图片描述
因此咱们在提取微博内容的时候能够顺便将用户id提取出来!
在这里插入图片描述

2.模拟登陆

咱们获取到用户id以后,只要请求weibo.cn/用户id/info 这个url就能够获取公开信息了,可是查看别人用户主页是须要登陆的,那咱们就先用代码模拟登陆!

咱们以前爬取豆瓣的时候,已经教过你们如何模拟登陆了,这里就直接放出代码!

在这里插入图片描述
登陆咱们使用的是requests.Session()对象,这个对象会自动保存cookies,下次请求自动带上cookies!

3.爬取用户公开信息

拿到用户id又登陆以后,就能够开始爬取用户公开信息啦!

在这里插入图片描述
这里公开信息咱们只要: 用户名、性别、地区、生日这些数据!因此咱们须要将这几个数据提取出来!
在这里插入图片描述
爬取用户信息不能过于频繁,不然会出现请求失败(响应状态码=418),可是不会封你的ip,其实不少大厂 不太会轻易的封ip,太容易误伤了,也许一封就是一个小区甚至更大!

5、保存csv文件

微博信息拿到了、用户信息也拿到了,那咱们就把这些数据保存起来,方便后面作数据分析!

咱们以前一直是保存txt格式的,由于以前都是只有一项数据,而此次是多项数据(微博内容、用户名、地区、年龄、性别等),因此选择CSV(Comma Separated Values逗号分隔值)格式的文件!

在这里插入图片描述
咱们生成一个列表,而后将数据按顺序放入,再写入csv文件!
在这里插入图片描述
看看生成的csv文件,注意csv若是用wps或excel打开可能会乱码,由于咱们写入文件用utf-8编码,而wps或excel只能打开gbk编码的文件,你能够用通常的文本编辑器便可,pycharm也能够!
在这里插入图片描述

6、数据分析

数据保存下来以后咱们就能够进行数据分析了,首先咱们要知道咱们须要分析哪些数据?

  1. 咱们能够将性别数据作生成饼图,简单直观
  2. 将年龄数据做出柱状图,方便对比,看看究竟是不是夕阳红老年团
  3. 将地区作成中国热力图,看看哪一个地区粉丝最活跃
  4. 最后将微博内容作成词云图,直观了解你们在说啥

1.读取csv文件列

由于咱们保存的数据格式为:'用户id', '用户名', '性别', '地区', '生日', '微博id', '微博内容',的不少行,而如今作数据分析须要获取指定的某一列,好比:性别列,因此咱们须要封装一个方法用来读取指定的列!

在这里插入图片描述
这里猪哥还使用了 Counter类来统计词频,方便后面数据分析,他返回的格式为:{'女': 1062, '男': 637}。

2.可视化库pyecharts

在咱们分析以前,有一件很重要的事情,那就是选择一个合适可视化库!你们都知道Python可视化库很是多,以前咱们一直在用matplotlib库作词云,matplotlib作一些简单的绘图很是方便。可是今天咱们须要作一个全国分布图,因此通过猪哥对比筛选,选择了国人开发的pyecharts库。选择这个库的理由是:开源免费、文档详细、图形丰富、代码简介,用着就是一个字:爽!

po一张他们的官方文档图片

在这里插入图片描述
这里有很是详细的例子,直接复制过来就能够运行获得图片!
在这里插入图片描述

3.分析性别

选择了可视化库以后,咱们就来使用吧!

在这里插入图片描述
这里说下为何生成的是html?由于这是动态图,就是能够点击选择显示的,很是人性化!执行以后会生成一个gender.html文件,在浏览器打开就能够!
在这里插入图片描述
在这里插入图片描述
效果图中能够看到,在打榜的粉丝中女性多于男性, 女性占比大概为62%!

4.分析年龄

这一项是你们比较关心的,真的是夕阳红粉丝团吗?

在这里插入图片描述
在这里插入图片描述
上图中咱们发现 为周杰伦打榜的主力军为:90后!

5.地区分析

下面咱们来看看打榜粉丝全国各省的分布状况!

在这里插入图片描述
上图中咱们能够看到 打榜最多的三个省(直辖市)依次为:广州、北京、上海

6.打榜内容分析

咱们来看看这些打榜的粉丝们都在说什么!

在这里插入图片描述
上图分析出现一些 有趣的词:营业、老年人、奶茶!

看来打榜粉丝们都自认为本身是老年人,哈哈哈!

在这里插入图片描述

7、总结

从结果来说为周杰伦打榜的粉丝主力军仍是80、90后,毕竟曾经的青春啊,并且女生要比男生多,打榜粉丝最多的地区为广东!

从技术分析今天这个例子有很多的新东西,了解新浪微博分页机制、爬取用户公开信息、使用csv库保存文件、使用pyecharts作数据可视化!

固然中间遇到了不少问题,只有本身亲自尝试才会知道,猪哥已经把源码放在github(github.com/pig6/sina_t… 或点击 阅读原文)中,感兴趣的同窗记得转发收藏有时间的时候尝尝鲜!

相关文章
相关标签/搜索