一步一步教你做微博用户画像分析:Python微博爬虫+词云生成

目标

用爬虫程序抓取目标用户人民日报的微博文本,通过分析词频,生成直观的词云图。

编写Python微博爬虫

所谓爬虫程序,其实就是通过计算机运行程序,模拟用户浏览网页的行为,向特定网站发送连接请求,获取网站返回的数据。

  • 所以首先需要确定发送请求的对象,也就是请求的目标网址
  • 其次需要确定发送请求的url中所需要携带的请求参数,从而实现检索特定网页信息
  • 最后则是如何从返回的网页数据中,定位出自己需要的有效信息

注意:微博的接口可能会发生变化,所以请不要盲目照抄,建议按照下述流程独立分析。

数据来源

微博移动版网页(点此跳转
内容简洁,便于分析,因此选用移动版网页作为爬取对象。

微博列表请求分析

打开目标用户的移动版微博主页:人民日报

注意:此处需要退出微博登录来保证请求内容的普适性。

F12打开开发者工具,这里使用的是谷歌浏览器。选中最上方的Network标签页,刷新页面来监测网络连接请求。
在这里插入图片描述
通过分析preview和response两个标签页的内容,可以确定获取微博列表的链接请求为:
https://m.weibo.cn/api/container/getIndex?uid=2803301701&t=0&luicode=10000011&lfid=100103type%3D1%26q%3D%E4%BA%BA%E6%B0%91%E6%97%A5%E6%8A%A5&type=uid&value=2803301701&containerid=1076032803301701

在开发者工具中查看该请求的头部信息,下拉到最后查看请求参数:
在这里插入图片描述
分析到请求参数一共有七个:

  1. uid: 2803301701
  2. t: 0
  3. luicode: 10000011
  4. lfid: 100103type=1&q=人民日报
  5. type: uid
  6. value: 2803301701
  7. containerid: 1076032803301701
    其中uidvalue都是用来唯一标识用户的,内容相同,lifd是用来标识微博用户名,containerid用来标识不同范围的微博, 107603 + u i d \rm107603+uid 107603+uid表示公开的所有微博,其他参数则都是默认无需变化。
    去掉参数后的请求地址为
    https://m.weibo.cn/api/container/getIndex?
    请求地址+特定参数即可访问特定用户的微博列表。
应答报文分析

通过开发者工具可以发现微博服务器回应请求的是一个较为复杂的json格式文件。
不要慌,一步步分析。
首先,通过request库的get方法,向上述分析出的url地址发送请求,获得回应的字符串文件,代码如下:

import requests
import json
url = 'https://m.weibo.cn/api/container/getIndex?'

#headers信息防止触发反爬虫机制
headers = {
   
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36'}

parameter = {
   
    'uid': '2803301701',
    't': '0',
    'luicode': '10000011',
    'lfid': '100103type=1&q=人民日报',
    'type': 'uid',
    'value': '2803301701',
    'containerid': '1076032803301701',
    'page_type': '60',
    'page': '1'
}
respones = requests.get(url + urlencode(parameter), headers=headers)
#通过json库的loads方法将返回的字符串转换为字典数据格式
data = json.loads(respones.text)

通过使用代码循环遍历字典中的键值对,对每个值输出其类型,是字典则迭代遍历,可以很快搞清楚该json文件的结构,并定位到我们所需用的信息。

该json文件最外层有两个键,一个是ok,值为0或1,代表查询成功或失败。
一个是data,值是一个字典,我们需要的信息在该字典的键cards对应的值中,而cards对应的值则是一个列表。在这里可以推测,因为移动版微博的每条微博都是卡片样式,所以cards中的每一个元素,对应主页的一条微博。

获取微博正文

通过访问微博正文,可以发现url格式为: h t t p s : / / m . w e i b o . c n / d e t a i l / + 标 识 数 字 \boxed {\rm https://m.weibo.cn/detail/+标识数字} https

  • 18
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值