fallenleaveslikewearyButterfly / B-

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

爬取B站所有用户数据

准备工作:

1.接口分析:

a) 经过分析,B站请求用户信息的接口为https://space.bilibili.com/ajax/member/GetInfo,需要携带两个post参数"mid","csrf": mid 应该就是用户在系统内的编号,更改该号码即可获取该用户的基本信息。并且不需要登陆即可抓取

2.反扒分析

a) 经过分析,B站的反扒措施为一定时间内登陆次数有限制,超过次数即封禁IP,过一段时间解封,因此本爬虫需要大量的代理才可爬取.

b) mid号依次递增超过2000不会再返回数据,因此,mid号码不能递增,只能随机获取。

爬虫思路:

a)需要维护一个代理池,可以用redis或者tornado起一个服务。我这里使用的是tornado起的服务,用aiohttp去请求代理接口。代理池需要动态的去请求第三方代理并验证该代理。

b)主要思路用到了生产者消费者模式,先把任务输入到redis set集合中,用set主要是为了随机获取mid号码。然后使用代理aiohttp去异步的请求B站接口,获取数据之后把任务从redis集合中移除。

优势:

1.由于不需要登陆,因此在并发数量上并没有限制,只要代理数量足够,加入多进程多起实例来加大并发数量,个人验证1000条数据大概只需要30秒左右即可爬完,因此一天可获取大约300W数据。

About