用Python爬取bilibili全站用户信息

news/2024/7/19 11:49:42 标签: python, 爬虫, 数据库

教你用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)是无法运行的

python copyable">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,如果大于则说明数据库数据已经运行完了,直接结束脚本,如果不大于则继续循环

python copyable">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))

复制代码

项目地址: github.com/cexll/bili_…

分析

2018-9-12 现已有10W数据进行简单数据分析各位看官看看就好

性别分布情况

​ 可以看到,还是有非常多的人不愿意透露性别的(.....)

用户增长情况

1970年都有大哥注册了,真是元老啊.....但是很少,大部分元老包括b站官方站长等也是2009年 ​

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

http://www.niftyadmin.cn/n/836922.html

相关文章

生成二维码(内嵌logo)条形码大全[附源码下载]

本例配套源码下载&#xff1a;https://download.csdn.net/download/djk8888/10505344 用到了&#xff1a;jquery.qrcode.js(实现简单&#xff0c;推荐此法)、ThoughtWorks.QRCode.dll等 HTML&#xff1a; <!DOCTYPE html> <html> <head><meta charset&…

DNS服务器未响应解决方案

网络诊断提示DNS服务器未响应该怎么办听语音 1128275人看了这个视频 27条相关视频 网络诊断提示DNS服务器未… 太平洋电脑… dns服务器未响应怎么解决 太平洋电脑… 电脑出现DNS错误不能上网… 太平洋电脑… 手机共享网络电脑提示DNS… 橙客传媒 王者荣耀显示语音服务…

FTP服务器解析

FTP服务器&#xff08;File Transfer Protocol Server&#xff09;是在互联网上提供文件存储和访问服务的计算机&#xff0c;它们依照FTP协议提供服务。 FTP是File Transfer Protocol(文件传输协议)。顾名思义&#xff0c;就是专门用来传输文件的协议。简单地说&#xff0c;支持…

1.HTTP基础知识

HTTP是超文本传输协议的简称&#xff0c;它是web应用的核心&#xff0c;HTTP协议由两部分程序实现&#xff1a;一个客户端程序和一个服务器程序&#xff0c;它们运行在不同的端系统&#xff0c;通过交换HTTP报文进行会话。 1. HTTP请求和响应 HTTP所采用的是请求/响应模型&…

NetStream配置

http://support.huawei.com/enterprise/docinforeader!loadDocument1.action?contentIdDOC1000067951&partNo10122#dc_fd_netstream_0002

游戏性能指标

对不同主流机器&#xff08;一般来自TOP20配置&#xff0c;覆盖90%以上的设备&#xff09;根据不同硬件能力建立高、中、低等多档性能指标&#xff0c;游戏按照该指标对应多个画质选项进行适配。 CPU负载&#xff1a;一帧内执行的指令数 GPU负载&#xff1a;一帧内执行的shader…

BBBBBBB

aaaaaaaaasd as daasdasdsad sd aasdsadASADASD asdasd a dasdasd as dasdsad as asdasdasd as d a aASDSADSADSADSADSASD da sd asasdasdsad dsa da 转载于:https://juejin.im/post/5b9f52be6fb9a05d1e0e4aa7

呵呵,Python操作MSSQL的帮助类

从网上找的&#xff0c;估计原文是&#xff1a;Python操作SQLServer示例 本文主要是Python操作SQLServer示例&#xff0c;包括执行查询及更新操作&#xff08;写入中文&#xff09;。 需要注意的是&#xff1a;读取数据的时候需要decode(utf-8)&#xff0c;写数据的时候需要en…