python2.7通过api和threading实现多进程爬取b站up主信息的小程序

该博客介绍了一种利用Python2.7通过Chrome浏览器API获取B站UP主信息的方法。首先,通过F12分析网络请求获取API,然后解析JSON数据。在主程序中,运用threading模块创建进程池,设定最大300个进程同时运行,通过进程池的map函数遍历并调用函数抓取和输出UP主信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、通过chrome浏览器的F12进行网络数据加载api的获取。

2、分析加载数据的格式,并通过json模块进行数据格式的转换,方便我们对数据进行获取和进一步操作。

3、在__name__ == __main__'文件中对我们我们的程序内容进行跟进,设置进程池,并进行基本设置(如:最多同时有300个进程在执行。之后我们通过进程池对象的map函数进行函数调用,用户id信息不断地传入到函数中,进行数据的获取和输出。)

# encoding=utf-8
import requests
from multiprocessing.dummy import Pool as ThreadPool
import json

# 获取用户基本信息详情
# https://api.bilibili.com/x/space/acc/info?mid=35228698&jsonp=jsonp
# 获取关注人数,和粉丝数量信息
# http://api.bilibili.com/x/relation/stat?vmid=2342345&jsonp=jsonp


def get_user_info(id):

    userInfo = {}

    # 获取用户名称、mid、性别、签名、头像avatar、用户等级level、用户创建时间、生日birthday、硬币数coins_nums
    # 是否有粉丝徽章、是否是会员(0, 无, 2,年度大会员)、会员状态(0,无,1 启用)
    url = 'https://api.bilibili.com/x/space/acc/info?mid=%s&jsonp=jsonp' % str(id)
    try:
        r = requests.get(url)
    except Exception as e:
        print (e)
                
    # 获取该用户的name属性值
    json_data = json.loads(r.text)

    # 获取用户个人信息
    userInfo['name'] = json_data['data']['name']
    userInfo['mid'] = json_data['data']['mid']
    userInfo['sex'] = json_data['data']['sex']
    userInfo['face'] = json_data['data']['face']
    userInfo['sign'] = json_data['data']['sign']
    userInfo['level'] = json_data['data']['level']
    userInfo['jointime'] = json_data['data']['jointime']
    userInfo['birthday'] = json_data['data']['birthday']
    userInfo['coins'] = json_data['data']['coins']
    userInfo['fans_badge'] = json_data['data']['fans_badge']
    userInfo['vip_type'] = json_data['data']['vip']['type']
    userInfo['vip_status'] = json_data['data']['vip']['status']

    url = 'http://api.bilibili.com/x/relation/stat?vmid=%s&jsonp=jsonp' % str(id)

    try:
        r = requests.get(url)
    except Exception as e:
        print (e)
    # 获取用户的粉丝和up主关注人员信息
    json_data = json.loads(r.text)

    userInfo['following'] = json_data['data']['following']
    userInfo['follower'] = json_data['data']['follower']

    print(userInfo)
    

if __name__ == '__main__':

    # for id in range(1000, 1022):
    ids = []
    for id in range(1000, 1022):
        ids.append(id)

    pool = ThreadPool(300)
    try:
        results = pool.map(get_user_info, ids)
    except Exception as e:
        print(e)

    pool.close()
    pool.join()

 爬取内容或输出结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值