【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

查看表数据

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python可通过使用数据库连接库,如PyMySQL、SQLite3等,来获取数据库的数据。 首先,需要安装相应的数据库连接库。以PyMySQL为例,可使用以下命令进行安装: ``` pip install PyMySQL ``` 接下来,需要导入相应的库,并建立数据库连接。以连接MySQL数据库为例,可使用以下代码: ```python import pymysql # 建立数据库连接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='database_name') ``` 然后,可以使用`cursor()`方法创建一个游标对象,通过该对象执行SQL查询语句。例如,获取所有数据的示例代码如下: ```python cursor = conn.cursor() # 执行SQL查询语句 sql = "SELECT * FROM table_name" cursor.execute(sql) # 获取所有数据 results = cursor.fetchall() # 输出数据 for row in results: print(row) ``` 最后,记得关闭数据库连接: ```python conn.close() ``` 以上即是使用Python获取数据库数据的简单示例。根据实际情况,可以根据需要编写更复杂的SQL查询语句,以符合具体的需求。 ### 回答2: 要使用Python获取数据库的数据,需要以下步骤: 1. 导入相关的库和模块:首先需要导入Python数据库相关库,如`pymysql`、`sqlite3`等,以便连接和操作数据库。 2. 建立数据库连接:使用库提供的函数建立与数据库的连接,需要提供数据库的连接信息,如数据库的主机名、端口号、用户名、密码等。 3. 创建游标对象:连接成功后,创建游标对象,用于执行SQL语句。 4. 执行SQL查询语句:使用游标对象执行SQL查询语句,可以是SELECT语句用于获取数据。例如,执行`SELECT * FROM tableName`可以获取所有数据。 5. 获取查询结果:执行查询语句后,可以通过游标对象的fetch系列函数来获取查询结果。常用的函数包括fetchone()、fetchall(),前者用于获取一条记录,后者用于获取所有记录。 6. 断开数据库连接:在完成数据获取后,需要关闭游标和断开与数据库的连接,以释放资源。 以下是一个使用`pymysql`库获取MySQL数据库数据的示例代码: ```python import pymysql # 建立数据库连接 conn = pymysql.connect( host='localhost', port=3306, user='your_username', password='your_password', database='your_database' ) # 创建游标对象 cursor = conn.cursor() # 执行SQL查询语句 sql = 'SELECT * FROM tableName' cursor.execute(sql) # 获取查询结果 result = cursor.fetchall() for row in result: print(row) # 断开数据库连接 cursor.close() conn.close() ``` 以上代码的示例连接MySQL数据库,执行SELECT语句,获取所有结果,并使用循环遍历输出。你可以根据实际情况修改连接信息和SQL语句。 ### 回答3: Python可以通过各种数据库连接库(例如MySQLdb、pymysql、psycopg2等)轻松地连接到数据库,并获取的数据。 首先,我们需要安装相关的数据库连接库。可以使用pip命令安装(例如:pip install pymysql)。 然后,在Python,我们需要导入相应的库。 1. 对于MySQL数据库,可以使用pymysql库进行连接和数据操作。导入方式如下: ```Python import pymysql ``` 2. 对于PostgreSQL数据库,可以使用psycopg2库进行连接和数据操作。导入方式如下: ```Python import psycopg2 ``` 接下来,我们需要使用相应库提供的函数来连接到数据库。一般需要提供数据库的连接信息,如主机名、数据库名、用户名和密码等。 以MySQL为例,我们可以使用如下代码连接到数据库: ```Python conn = pymysql.connect(host='localhost', user='root', password='password', database='database_name', charset='utf8') ``` 然后,我们可以创建一个游标来执行SQL查询或操作。 ```Python cur = conn.cursor() ``` 接下来,我们可以使用游标执行一些SQL语句,如查询语句、插入语句、更新语句等。 ```Python cur.execute("SELECT * FROM table_name") ``` 我们可以使用fetchone()、fetchmany()或fetchall()等方法获取查询结果。 ```Python result = cur.fetchone() ``` 最后,记得关闭连接和游标。 ```Python cur.close() conn.close() ``` 综上所述,以上就是使用Python获取数据库数据的一般步骤。具体的代码和库可能因数据库种类而异,但整体思路是相似的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值