博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Python爬取bilibili全站用户信息
阅读量:7256 次
发布时间:2019-06-29

本文共 2096 字,大约阅读时间需要 6 分钟。

教你用Python爬取哔哩哔哩全站用户信息


运行

下载

git clone https://github.com/cexll/bili_user_Spider.git复制代码

运行环境

  • Windows/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年 ​

  • 由于一些小问题小坑,已经将数据保存部分进行重写,这次使用了MySQL,有兴趣的可以去Github看看

转载地址:http://huvdm.baihongyu.com/

你可能感兴趣的文章
java基本类型和包装类的区别(转)
查看>>
转向和重定向
查看>>
Java读取文本文件中文乱码问题
查看>>
Anaconda Error opening file for writing , failed to create anacoda menu等报错问题解决方案...
查看>>
详解PHP反射API
查看>>
Lua table直接索引VS缓存索引性能测试小示例
查看>>
原生javascript实现类似jquery on方法的行为监听
查看>>
关于CSRF跨域请求伪造的解决办法
查看>>
[Kubernetes]kubectl命令补全出错
查看>>
浅解多线程(一)
查看>>
2016-8-29
查看>>
数据库知识回忆
查看>>
关于typename和class
查看>>
Logging Exceptions
查看>>
Java常识
查看>>
动态网站爬虫Python-selenium-PhantomJS
查看>>
iOS 上面两个角变圆角
查看>>
使用xshell xftp连接centos的过程。
查看>>
lab5:分析system_call中断处理过程
查看>>
yii框中findOne()的用法
查看>>