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()
爬取内容或输出结果如下: