爬取B站前两千位up主的粉丝数

2023-10-30

看到B站有很多分析up主粉丝量的视频,自己也来试着实现一下

  1. 第一步先进到一位up主的个人空间,这里以uid是1和2的bishi为例,
    https://space.bilibili.com/1/,用户名:bishi
    https://space.bilibili.com/2/,用户名:碧诗
    可以看到,前面的链接都是一样的,后面的数字就是up主的uid,那我们只要改变后面的数字就可以了。
    但是,如果在爬虫程序中直接用这个url会发现获取不到数据,所以说,这个url是不正确的。
    在这里插入图片描述
    说到底,我们效果要获取的就是粉丝数等,而所有的数据都会在控制台中出现,那我们直接搜索粉丝数就可以了,这里注意一点,大up主的粉丝是以万为单位的,但是在控制台中并不是。所以他的粉丝10.3万,需要用103来搜索(不要小数点,但是10.3万并不精确到个,所以只用103就可以)
    在控制台按CTRL+F,搜索103
    在这里插入图片描述
    当然还有一种做法,这是我已经找到数据才发现的,粉丝在代码中显示的英语是follower,所以直接搜索follower也是可以的
    在这里插入图片描述
    可以看到,搜索103有90个结果,而follow只有14个结果
    搜索完成之后,可以挨个结果点开看,经验比较丰富的找起来会更快一点。
    找到需要的文件,打开,发现相应的结果是这个:

__jp3({“code”:0,“message”:“0”,“ttl”:1,“data”:{“mid”:1,“following”:5,“whisper”:0,“black”:0,“follower”:102616}})

mid:其实就是uid
following:关注数
follower:粉丝数
剩下两个我没在网页找到对应的东西
102616约等于10.3万,如果不放心的话,可以多找几个试试。
之后,我们需要再找到url,到标头(header)里,找到请求url(request url):

https://api.bilibili.com/x/relation/stat?vmid=1&jsonp=jsonp&callback=__jp3

vmid=1,就是uid,后面的东西每个up主都是一样的
那我们的url就可以用循环来设置

uid = 1
while True:
	url = f'https://api.bilibili.com/x/relation/stat?vmid={str(uid)}&jsonp=jsonp&callback=__jp3'  
  1. 之后就是发送请求,获取相应就可以了,需要注意的是,响应回来的数据是json格式,需要导入json包,json.dumps()一下。将解析出来的数据存到数据库里。
import requests
import json
import MySQLdb

conn = MySQLdb.connect(host='localhost',port=3306,password='',user='',db='',charset='utf8')
cursor = conn.cursor()
uid = 1
while uid <100000:
    try:
        headers = {
            'referer': 'https://api.bilibili.com/x/relation/stat?vmid=10330740',
            'user-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'
        }
        url = f'https://api.bilibili.com/x/relation/stat?vmid={str(uid)}&jsonp=jsonp&callback=__jp3'
        proxy = {'HTTP': 'HTTP://106.37.195.199:8080'}
        res = requests.get(url,headers=headers,proxies=proxy)
        print(res.text[6:-1])
        result = json.loads(res.text[6:-1])
        fans = result['data']['follower']

        url2 = f'https://api.bilibili.com/x/space/acc/info?mid={str(uid)}&jsonp=jsonp'
        res2 = requests.get(url=url2,headers = headers,proxies=proxy)
        result2 = json.loads(res2.text)
        name = result2['data']['name']
        level = result2['data']['level']
        sql = 'insert into bilibili values (%s,%s,%s,%s)'
        cursor.execute(sql,(uid,name,level,fans))
        conn.commit()

    except:
        pass
    uid+=1


cursor.close()
conn.close()
  1. 个人习惯重新写一个py文件,当然不新写也行,不把数据存放到数据库也是可以的
    使用pyecharts或者echarts进行数据可视化,此处以pyecharts为例
    相关教程,可以自己查阅官方文档

http://pyecharts.org/#/zh-cn/intro

因为不难,只要套用就可以了,所以直接上代码

import pymysql
from pyecharts.charts import Bar
from pyecharts import options as opts
conn = pymysql.connect(
    host = "localhost",
    port = 3306,
    user = "",
    passwd = "",
    db = "",
    charset="utf8"
)
cursor = conn.cursor()
sql = "select name ,fans from bilibili order by -fans"
cursor.execute(sql)
data = cursor.fetchall()
print(data)
c = (
    Bar()
        .add_xaxis([i[0] for i in data])
        .add_yaxis("粉丝数量", [i[1] for i in data])
        .set_global_opts(title_opts=opts.TitleOpts(title="前两千名up主的粉丝数量"),
                         datazoom_opts=[opts.DataZoomOpts()])
        .render("bar_stack0.html")
)

先后运行两个文件,就会发现多了一个html文件,用浏览器打开,就可以看到了
在这里插入图片描述
最后,一个比较麻烦的事,B站是有反爬机制的,过快的访问会封禁ip,我试的时候,大概爬取600条数据就会封禁ip,解决办法也只能是换ip,资金充足可以花钱买,当然也可以爬取免费ip,这个下次再说吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬取B站前两千位up主的粉丝数 的相关文章

  • Pygame读取MIDI输入

    我参考了Pygame MIDI 文档 https www pygame org docs ref midi html and 这段代码 https stackoverflow com questions 62983509 pygame mi
  • 在 Django 中定义视图和 url。为什么调用函数时不使用括号?

    我已经在经历 Python速成课程 目前正在进行 Django Web应用程序项目 学习日志 阶段 有些东西与我已经学到的相矛盾 views py file from django shortcuts import render def i
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 类属性在功能上依赖于其他类属性

    我正在尝试使用静态类属性来定义另一个静态类属性 我认为可以通过以下代码来实现 f lambda s s 1 class A foo foo bar f A foo 然而 这导致NameError name A is not defined
  • 在 Python 中使用 sec 函数的反函数

    我正在创建一个程序 用于计算从一定高度范围和设定初始速度发射射弹的最佳角度 在我需要使用的最终方程中 存在一个反 sec 函数 它导致了一些麻烦 我已经导入了数学并尝试使用 asec 无论如何 但是数学似乎无法计算反秒函数 我也明白 sec
  • Python 中 genfromtxt() 的可变列数?

    我有一个 txt具有不同长度的行的文件 每一行都是代表一条轨迹的一系列点 由于每条轨迹都有自己的长度 因此各行的长度都不同 也就是说 列数从一行到另一行不同 据我所知 genfromtxt Python 中的模块要求列数相同 gt gt g
  • VSCode pytest 测试发现失败

    Pytest 测试发现失败 用户界面指出 Test discovery error please check the configuration settings for the tests 输出窗口显示 Test Discovery fa
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • Pandas:根据列名进行列的成对乘法

    我有以下数据框 gt gt gt df pd DataFrame ap1 X 1 2 3 4 as1 X 1 2 3 4 ap2 X 2 2 2 2 as2 X 3 3 3 3 gt gt gt df ap1 X as1 X ap2 X a
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • 在 Mac 上安装 Pygame 到 Enthought 构建中

    关于在 Mac 上安装 Pygame 有许多未解答的问题 但我将在这里提出我的具体问题并希望得到答案 我在 Mac 上安装 Pygame 时遇到了难以置信的困难 我使用 Enthought 版本 EPD 7 3 2 32 位 它是我的默认框
  • 在 Windows 上使用 IPython 笔记本时出现 500 服务器错误

    我刚刚在 Windows 7 Professional 64 位上全新安装了 IPython 笔记本 我采取的步骤是 从以下位置安装 Python 3 4 1http python org http python org gt pip in
  • urllib2.urlopen() 是否实际获取页面?

    当我使用 urllib2 urlopen 时 我在考虑它只是为了读取标题还是实际上带回整个网页 IE 是否真的通过 urlopen 调用或 read 调用获取 HTML 页面 handle urllib2 urlopen url html
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 是否可以写一个负的python类型注释

    这可能听起来不合理 但现在我需要否定类型注释 我的意思是这样的 an int Not Iterable a string Iterable 这是因为我为一个函数编写了一个重载 而 mypy 不理解我 我的功能看起来像这样 overload
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including
  • asyncio - 多次等待协程(周期性任务)

    我正在尝试为异步事件循环创建定期任务 如下所示 但是我收到 RuntimeError 无法重用已等待的协程 异常 显然 asyncio 不允许等待相同的可等待函数 如中讨论的这个错误线程 https bugs python org issu
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt
  • 将 Scikit-Learn OneHotEncoder 与 Pandas DataFrame 结合使用

    我正在尝试使用 Scikit Learn 的 OneHotEncoder 将 Pandas DataFrame 中包含字符串的列替换为 one hot 编码的等效项 我的下面的代码不起作用 from sklearn preprocessin
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA

随机推荐

  • Oracle创建临时表

    Oracle临时表 临时表是一种特殊的表 当需要对某一 也可以是多个 表中的一批数据进行反复的操作时 通过为这批数据创建一个临时表 可能会简化操作并且有可能提高效率 语法 CREATE GLOBAL TEMPORARY TABLE 临时表空
  • 【C语言】——调试技巧

    目录 编辑 前言 1 什么是Bug 2 什么是调试 2 1调试的基本步骤 2 2Release与Debug 3 常用快捷键 4 如何写出好的代码 4 1常见的coding技巧 assert const const修饰指针 前言 调试是每个程
  • linux系统下部署python自动化程序并配置Jenkins定时执行

    问题 自动化测试脚本代码咱已经有了 项目地址Python接口自动化框架 那么该如何部署到我们的服务器上 在服务器上定时自动执行呢 思路 首先 我们要统一环境 大家知道 python2和python3的语法和库有很多改动 而大多服务器自带的p
  • spring boot 使用@ConfigurationProperties

    有时候有这样子的情景 我们想把配置文件的信息 读取并自动封装成实体类 这样子 我们在代码里面使用就轻松方便多了 这时候 我们就可以使用 ConfigurationProperties 它可以把同类的配置信息自动封装成实体类 首先在配置文件里
  • XSS之xss-labs-level3

    文章目录 0x01 XSS Labs 0x02 实验工具 0x03 实验环境 0x04 实验步骤 0x05 实验分析 0x06 参考链接 0x01 XSS Labs XSS 跨站脚本攻击 是指恶意攻击者往Web页面里插入恶意Script代码
  • css伪元素实现选中效果【打勾效果】

    css伪元素实现选中效果 item border 1px solid 00a9ff position relative after position absolute content width 0px height 0px top 0px
  • 基于SECS协议开发的简明教程(7)

    接着前面6篇SECS GEM开发教程系列 基于SECS协议开发的简明教程 1 怎么搭建支持SECS工程 基于SECS协议开发的简明教程 2 怎么编辑交换数据的ID 基于SECS协议开发的简明教程 3 怎么收 发控制命令和数据消息 基于SEC
  • FA萤火虫算法求解二元四峰函数的简单例子(python代码)

    这个代码是应付智能优化的课的 代码有些地方有些重复啰嗦 请大家担待 可视化都是自己搞得 好多for循环打印 有些地方完全可以构造函数 大家有需要可以自己改一下 import random import numpy as np import
  • python--支持向量机应用小例

    以下内容笔记出自 跟着迪哥学python数据分析与机器学习实战 外加个人整理添加 仅供个人复习使用 SVM的分类效果 软间隔的作用 复杂算法容易造成过拟合 如何解决 核函数的作用 核函数的作用 可以实现非线性分类 import numpy
  • SpringBoot整合vue-admin-template实现登录

    vue admin template简介 前后端分离开发模式越来越受开发人员的喜爱 开源项目vue admin template 是一个后台前端解决方案 它基于 vue 和 element ui实现 更多详情请阅读vue template
  • java打印模板_怎样做一个word模板,用java调用打印功能

    1 首先新建一个空白文档 并另存为 Normal dotm Word2007及以后版本 Normal dot Word2003 2007版本 2 进行需要的模板设置 对字体 段落 页眉页脚 页面边距等进行设置 3 对字体 段落的设置 在空白
  • JSON格式化异常:JsonMappingException

    使用RestTemplate请求post json接口报错 Caused by org codehaus jackson map JsonMappingException Can not instantiate value of type
  • 【Linux命令详解

    文章标题 简介 一 参数列表 二 使用介绍 1 打包文件和目录 2 解包归档文件 3 压缩归档文件 4 列出归档文件内容 5 排除特定文件 6 保留文件权限和所有权 7 保留时间戳 8 增量备份 9 使用文件列表 10 压缩级别控制 总结
  • html iframe post,iframe实现跨域post请求的技术细节

    在最近的一个项目中 我打算在页面上实现这样一个功能 在网页上画出某种图形 上传到服务器后 返回一个src地址 这个地址可以用来分享到各种社交媒体 这个功能看似非常简单 但要实现它还需要注意各种小的细节 首先说下思路和技术要点 用canvas
  • vue下载所有格式的文件

    vue下载所有格式的文件 vue下载所有格式的文件需要先安装downloadjs插件 downloadjs官网 https github com rndme download 下载插件 npm install downloadjs vue引
  • STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

    目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号 STM32F103C8T6 在日常生活中 很多情况下会需要使用时间 单片机中虽然也是有定时器但并不能较为准备的实现计时功能 而且
  • SpringBoot + Poi-tl操作word,快速生成报表

    前段时间做了一个需求 需要快速生成一份数据报告 里面包含了文字 图片和数据报表 同时生成的图形数据也可以随意修改 之前想着使用Apache POI来进行实现 在翻阅一些资料后 发现poi tl更适合我们的业务 也更容易上手 于是对其进行了研
  • 什么是实例分割,与语义分割和目标检测有何不同?

    在计算机视觉领域 图像分割是一项重要任务 旨在将图像分割成具有语义或实例级别的不同区域 实例分割 语义分割和目标检测是图像分割中的三个关键概念 本文将介绍这些概念 并详细讨论它们之间的区别和特点 什么是目标检测 1 目标检测 目标检测是一种
  • docker容器CPU共享比例——通过--cpu-shares选项设置容器按比例共享CPU资源(弹性)

    多容器任务运行时 很难计算CPU的使用率 命令中的 cpu shares选项值不能保证可以获得1个vcpu或者多少GHz的CPU资源 仅仅只是一个弹性的加权值 root 10 docker run name con1 itd cpu sha
  • 爬取B站前两千位up主的粉丝数

    看到B站有很多分析up主粉丝量的视频 自己也来试着实现一下 第一步先进到一位up主的个人空间 这里以uid是1和2的bishi为例 https space bilibili com 1 用户名 bishi https space bilib