git clone https://github.com/cexll/bili_user_Spider.git
- Ubuntu
- Python 3.6
- VSCode
- requests
- pymongo
- mongodb
使用本脚本请先安装好MongoDB,并且安装好库
pip install -r requirements.txt
运行前请进入脚本把cookie和mid改成自己的方便第一时间给数据库增加相应的数据
python3 spider.py
这是用思维导图画的一个脚本的大致运行情况
程序的大致思路是这样,通过mid进入用户主目录,然后获取用户个人信息并保存到数据库,然后获取用户的粉丝数量以及关注数量方便之后计算页数,下一步获取所有的关注用户mid以及粉丝用户mid保存到数据库,然后依次提取数据库mid进入用户主目录循环至结束
数据通过bilibili
官方api
获取除了获取个人信息
必须要进入用户目录
才能成功获取其他都可直接通过API
获取到数据
这里就上最主要的代码
运行函数,首选进入用户主页然后获取个人信息到数据库
然后获取粉丝数量以及关注数量
通过关注数量 / 50
得到页数, 这里做了如果结果小于或等于1
那么就直接当1,不然range(1, 1)
是无法运行的
def run(mid):
"""
运行函数
"""
# 进入用户主页
get_space(mid)
# 获取关注数量和粉丝数量
f, g = get_myinfo(mid)
# 获取关注用户信息
f_g_ps = 50
f_g_pn = int(g / f_g_ps)+1
if f_g_pn <= 1:
get_followers(mid, 1, f_g_ps)
else:
for g_pn in range(1, f_g_pn):
get_followings(mid, g_pn, f_g_ps)
# 获取粉丝用户信息
f_r_ps = 50
f_r_pn = int(f / f_r_ps)+1
print(f_r_pn)
if f_r_pn <= 1:
get_followers(mid, 1, f_r_ps)
else:
for r_pn in range(1, f_r_pn):
get_followers(mid, r_pn, f_r_ps)
# 循环
rep_run()
这里MIN
必须要先初始值,就设置了一个全局变量,进入rep_run
,MIN
变量加一,连接list
数据库,查询数据库所有信息保存到result
,max
是从数据库提取出来的信息最大count
,接下来判断MIN
是否大于max
,如果大于则说明数据库数据已经运行完了,直接结束脚本,如果不大于则继续循环
def rep_run():
"""
当上一个mid所有事情完成后进入此函数进行循环爬取下一个mid
"""
global MIN
# 每次运行此函数使MIN加一,不能大于max(数据库count)
MIN += 1
collection = db.list
# 查询数据库所有数据保存到result
if collection.find({'id': MIN}):
ran = collection.find({'id': MIN})
# 查询数据库有多少条
count = collection.find({}).count()
for x in ran:
mid = x.get('mid')
if MIN > count:
print('程序即将停止运行,所有信息爬取完成')
time.sleep(10)
exit()
else:
run(mid)
else:
print('数据库没有该数据 id: {}'.format(MIN))
2018-9-12 现已有10W数据进行简单数据分析各位看官看看就好
可以看到,还是有非常多的人不愿意透露性别的(.....)
这1970年都有大哥注册了,真是元老啊.....但是很少,大部分元老包括b站官方站长等也是2009年