Skip to content
Go back

简单的免登陆抓取新浪微博数据

0x00 Introduction

饭偶像之后承担了写群机器人的工作,所以最近一直在鼓弄爬虫,写了集资实时监控,现在是微博监控,之后还要写其他东西…库亚西。

之前就看过很多爬微博的一些文章,不过大多需要模拟登录,或者是调用weibo的api,后来貌似API权限逐渐降低,也就变得不实用了。。。

手机版weibohttp://m.weibo.com后加uid便可以进行博文。

这个爬虫的小程序是通过手机版weibohttp://m.weibo.com来进行模拟请求,不是通过分析html代码再通过筛选来完成数据抓取。 简单的介绍就是这样,后面是正文!

0x01 Let’s Start

获取微博用户的对应Id

使用的工具是:Chrome 开发者工具 Windows下快捷键:F12 MacOS下快捷键:alt+cmd+i

打开 开发者工具-选中network-在左边选中带有getIndex?的包

获取我们所需要的uidcontainerId.

PS:虽然Query String字段有很多项,但仅需要uid和containerId就可以定位到置顶微博用户。

寻找所需要的请求

可见它是有很多JSON数据在一起的请求包

而微博正文就隐藏在这个请求包中的mblog中

原始数据获取及转码

我们来通过 requests 库写一个简单的模拟请求。

在这里我们使用py3。相比于py2的优点是不需要额外进行 unicode to 中文的转化。

import requests
url="https://m.weibo.cn/api/container/getIndex"
payload={'type':'uid','value':'5879771257','containerid':'1076035879771257'}
r=requests.post(url,data=payload)
raw_text=r.text

如果是py2的话,还要raw_text=r.text.encode().decode()

encode之后是byte格式,decode使其变成str格式。

JSON转换成dict

数据本来就是JSON对象。通过json.loads()转换为python的数据字典dict. 再通过dict的定位就可以抓取到微博内容了。

0x02 部分代码

#原始URL:https://m.weibo.cn/api/container/getIndex?type=uid&value=5931004865&containerid=1076035931004865

import requests
import json
url="https://m.weibo.cn/api/container/getIndex"
payload={'type':'uid','value':'5879771257','containerid':'1076035879771257'}

r=requests.post(url,data=payload)
raw_text=r.text
d=json.loads(raw_text)
for i in range(10):
    print(d["cards"][i]["mblog"]["text"])

0x03 PS

不仅仅是博文内容,个人资料等只要出现在m.weibo.com的内容均可以爬取下来。

一个请求包含最多10条微博,可通过再末尾加入page页数来继续循环模拟请求。

Example: https://m.weibo.cn/api/container/getIndex?type=uid&value=5879771257&containerid=1076035879771257&page=2

有其他问题可以在评论框提出。尚未发现banIP的情况。

0x04 Update in 2021

本项目已归档。

爬虫及队列更新请于github查看。


Share this post on:

Previous Post
记一次有意思的burp渗透经历
Next Post
关于Git/config.泄露的小结 及 assert()函数注入初探