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()
爬取內容或輸出結果如下: