【Python】获取B站粉丝列表保存至数据库中

分析网络请求,获取到有粉丝接口的数据url

可以在响应信息处看到粉丝的信息

通过浏览器也可以直接请求到具体的JSON信息

通过独立的标签我们可以看到接口数据,但是要注意如果不是查看自己登录账户的接口那么就无法查询到所有粉丝的数据,默认只能查看前五页也就是100条。

如果是自己的账户,那么可以查询到所有的粉丝信息。

当然,我们即使能在界面上看到粉丝的信息,但是肯定不满于此,需要将数据持久化才可以供自己使用。

使用Python进行数据持久化

建表语句

CREATE TABLE IF NOT EXISTS dev.`subscribe`
(
    `mid`          bigint COMMENT '粉丝id',
    `uname`        VARCHAR(50) COMMENT '粉丝名称',
    `sign`         VARCHAR(255) COMMENT '粉丝签名',
    `mtime`        date COMMENT '关注时间',
    `vip_type`     int COMMENT 'vip类型: 0:从来不是vip;1:已过期vip或大会员;2:年度会员',
    `vip_txt`      VARCHAR(40) COMMENT 'vip类型名称(中文)',
    `label_theme`  VARCHAR(40) COMMENT 'vip类型名称(英文)',
    `vip_status`   int COMMENT 'vip状态: 0:过期;1:正常',
    `vip_due_date` date COMMENT 'vip到期日',
    `uname_url`    VARCHAR(255) COMMENT '粉丝主页url',
    `face_url`     VARCHAR(255) COMMENT '粉丝图片url',
    `create_date`  date DEFAULT NULL COMMENT '爬取日期',
    `create_time`  time DEFAULT NULL COMMENT '爬取时间'
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8
;

Python具体代码 

import time

import requests

import pymysql


def toDate(timestamp):
    timestamp = int(str(timestamp)[0:10])
    time_struct = time.gmtime(timestamp)
    return time.strftime('%Y-%m-%d %H:%M:%S', time_struct)


def insert_data_to_mysql(host, user, password, db, data):
    # 连接到 MySQL 数据库
    connection = pymysql.connect(host=host, user=user, password=password, db=db, charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)

    try:
        with connection.cursor() as cursor:
            # 创建 INSERT 语句
            sql = """
            INSERT INTO subscribe (mid, uname, sign, mtime, vip_type, vip_txt, label_theme, uname_url, face_url, vip_status, vip_due_date) 
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            """

            # 遍历数据并执行插入操作
            for item in data:
                cursor.execute(sql,
                               (item['mid'], item['uname'], item['sign'], item['mtime'], item['vip_type'], item['vip_txt'], item['label_theme'], item['uname_url'], item['face_url']
                                , item['vip_status'], item['vip_due_date']))

        # 提交事务
        connection.commit()

    finally:
        # 关闭数据库连接
        connection.close()


# 初始化页码和每页大小
pn, ps = 1, 20

while True:
    # URL 地址,使用格式化字符串插入页码和每页大小
    url = f"https://api.bilibili.com/x/relation/fans?vmid=451320374&pn={pn}&ps={ps}&order=desc&gaia_source=main_web&web_location=333.999&w_rid=b9bc75b979a0ccc5769ed6c8ae81c12c&wts=1702886635"

    # 自定义请求头
    headers = {
       "Cookie": 填写自己的Cookie,
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
    }

    # 使用 GET 方法请求数据,附加自定义请求头
    response = requests.get(url, headers=headers)

    # 检查请求是否成功
    if response.status_code == 200:
        # 解析 JSON 数据
        data = response.json()
        extracted_info = []
        # 这里可以处理或输出 data 中的数据
        for item in data['data']['list']:
            extracted_data = {
                'mid': item['mid'],
                'uname': item['uname'],
                'sign': item['sign'],
                'mtime': toDate(item['mtime']),
                'uname_url': f"https://space.bilibili.com/{item['mid']}",
                'face_url': item['face'],
                'vip_type': item['vip']['vipType'],
                'vip_txt': item['vip']['label']['text'],
                'label_theme': item['vip']['label']['label_theme'],
                'vip_status': item['vip']['vipStatus'],
                'vip_due_date': toDate(item['vip']['vipDueDate'])
            }
            extracted_info.append(extracted_data)

        # 插入数据到数据库
        insert_data_to_mysql('192.168.153.116', 'root', '123', 'dev', extracted_info)

        # 检查是否有下一页
        if len(data['data']['list']) < ps:
            print("已经是最后一页")
            break
        else:
            print("翻页")
            print(url)
            pn += 1
            time.sleep(5)  # 防止过快请求导致被限制
    else:
        print("请求失败,状态码:", response.status_code)
        break

查看表数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/254646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python通过函数名调用函数的几种场景

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 除了执行系统命令外&#xff0c;我们有时还需要动态地执行一些python代码&#xff0c;有经验的朋友就会知道可以使用内置函数eval实现这一需求&#xff0c;如eval(“…

Appcelerator打包ipa有哪些优势

大家好&#xff0c;我是咕噜-凯撒&#xff0c;我们得先知道Appcelerator是啥&#xff0c;Appcelerator&#xff08;现在更名为Axway Titanium&#xff09;是一个跨平台的移动应用开发框架通过提供一种简化和加速移动应用开发的方式帮助你构建高质量的跨平台应用程序。那使用App…

【基础篇】YOLO系列训练环境(GPU)搭配篇

🚀Pytorch环境配置(Windows) 🔨 Anaconda安装 此处下载安装即可 ⭐温馨提示:安装路径不能含有中文,建议不要安在c盘(很占内存) 环境变量配置 编辑系统环境变量 -> 环境变量 -> 系统变量 新建并添加以下路径 打开cmd,输入conda&

设计模式—装饰模式

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 装饰模式—穿衣服&#x1f48e;总结 装饰模式—穿衣服 装饰模式&#xff08;Decorator&#xff09;可以动态的给对象添加一些额外的职责。 Component是定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。…

【深度学习目标检测】十、基于yolov5的火灾烟雾识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

Vditor - Markdown编辑器使用

1、安装 yarn add vditor2、代码 import vditor/dist/index.css; import React, { useEffect } from react; import Vditor from vditor; import ./index.less;const App ({ setVditorValue, vditorValue }: any) > {const [vd, setVd] React.useState<Vditor>();…

Redis-网络模型

参考资料 &#xff1a;极客时间 Redis&#xff08;亚风&#xff09; 前置知识 系统隔离 为了避免⽤户应⽤导致冲突甚⾄内核崩溃&#xff0c;⽤户应⽤与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、⽤户空间 • ⽤户空间只能执⾏受限的命令&…

激活函数-SwiGLU

SwiGLU SiLU 函数是一种神经网络中的激活函数&#xff0c;全称是 Sigmoid Linear Unit, 也被称为 Swish 函数。它由 Google Brain 在 2017 年提出&#xff0c;是一种非线性激活函数&#xff0c;能够有效地对神经网络的输入进行非线性变换。 定义 f ( x ) x ∗ σ ( x ) f(x)…

vue3使用vue-router嵌套路由(多级路由)

文章目录 1、Vue3 嵌套路由2、项目结构3、编写相关页面代码3.1、编写route文件下 index.ts文件3.2、main.ts文件代码&#xff1a;3.3、App.vue文件代码&#xff1a;3.4、views文件夹下的Home文件夹下的index.vue文件代码&#xff1a;3.5、views文件夹下的Home文件夹下的Tigerhh…

生命在于学习——TV电视盒子渗透测试抓包设置

一、前言 封面图是示例图&#xff0c;因为涉及到保密&#xff0c;所以本次测试的电视盒子不放出外观和设置界面。 这一次要测试电视盒子&#xff0c;大家也都知道&#xff0c;市面上的电视盒子大部分都是Android&#xff0c;当然&#xff0c;要使用笔记本去抓电视盒子的数据包…

圣诞节来了,为大家送上专属圣诞树

Hello大家好&#xff0c;我是Dream。 今天给大家分享一下我很早之前做过的圣诞树&#xff0c;分享给大家&#xff0c;希望可以帮助到大家度过一个浪漫的圣诞节~ Python打造专属于你的圣诞树落叶雪花背景音乐浪漫弹窗 五合一版圣诞树 一、背景故事圣诞节风波❤️❤️❤️ 二、五…

针对海量数据的存储与访问瓶颈的解决方案

背景 在当今这个时代&#xff0c;人们对互联网的依赖程度非常高&#xff0c;也因此产生了大量的数据&#xff0c;企业视这些数据为瑰宝。而这些被视为瑰宝的数据为我们的系统带来了很大的烦恼。这些海量数据的存储与访问成为了系统设计与使用的瓶颈&#xff0c;而这些数据往往存…

内网BUG管理系统本地部署并结合内网穿透实现异地远程访问

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

Windows如何安装使用TortoiseSVN客户端并实现公网访问本地SVN Server

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

泛型深入理解

泛型的概述 泛型&#xff1a;是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 泛型的格式&#xff1a;<数据类型>; 注意&#xff1a;泛型只能支持引用数据类型。 集合体系的全部接口和实现类都是支持泛型的使用的。 泛型的…

周周清(3)

周一&#xff1a; 写了一道算法题&#xff0c;然后由于身体原因&#xff0c;在宿舍休息了很久&#xff1b;然后还是完成了一道算法题&#xff1a;写了一道LRC缓存题&#xff0c;之前就开始写了&#xff0c;写了很久&#xff0c;每次都开始动笔&#xff0c;刚开始用的是队列加m…

太阳能电池效能IV测试PV检测太阳光模拟器

目录 概述 一、系统组成 产品特点&#xff1a; 技术参数 数字源表 本系统支持Keithley24xx系列源表 标准太阳能电池 低阻测试夹具 自动化测试软件 概述 太阳能光伏器件的所有性能表征手段中&#xff0c;IV特性测试无疑是最直观、最有效、最被广泛应用的一种…

智能配电房运维

智能配电房运维是指利用先进的信息化技术&#xff0c;依托电力智慧运维工具-电易云&#xff0c;对配电房的电气运行设备进行实时在线监测、集中监控和故障诊断处理&#xff0c;以提高设备维护效率、降低停电损失、提高用电效益&#xff0c;并消除用户终端配电系统的安全隐患。 …

进来看!企业有效监管员工工作微信的总要性

随着社交媒体的普及和信息传播的便捷化&#xff0c;员工在工作间隙利用微信进行交流已经成为一种常见的现象。然而&#xff0c;这种行为也引发了企业对员工微信监管的需求。 首先&#xff0c;企业监管员工微信可以帮助确保企业对内部信息的保密和安全。通过监管员工微信&#…

演讲回顾:半导体设计中的数字资产管理最佳实践

近日&#xff0c;在广州举行的中国集成电路设计业2023年会&#xff08;ICCAD 2023&#xff09;上&#xff0c;龙智资深顾问、技术支持部门负责人李培将带来主题演讲“半导体设计中的数字资产管理”&#xff0c;聚焦数字资产管理的两个层面——文件级别的管理和更高抽象层次的管…