本文纯属学习交流,请勿做它用,违者后果自负
import requests
import json
import random
import datetime
import time
from user_agent import UA
from multiprocessing.dummy import Pool as ThreadPool
def datetime_to_timestamp_in_milliseconds(d):
def current_milli_time():
return int(round(time.time() * 1000))
return current_milli_time()
head = {
'User-Agent': UA,
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'http://space.bilibili.com/45388',
'Origin': 'http://space.bilibili.com',
'Host': 'space.bilibili.com',
'AlexaToolbar-ALX_NS_PH': 'AlexaToolbar/alx-4.0',
'Accept-Language': 'zh-CN,zh;q=0.8,en;q=0.6,ja;q=0.4',
'Accept': 'application/json, text/javascript, */*; q=0.01',
}
time1 = time.time()
urls = []
for m in range(5214, 5215):
for i in range(m * 100, (m + 1) * 100):
url = 'https://space.bilibili.com/' + str(i)
urls.append(url)
def getsource(url):
for i in url:
payload = {
'_': datetime_to_timestamp_in_milliseconds(datetime.datetime.now()),
'mid': i.replace('https://space.bilibili.com/', '')
}
head = {
'User-Agent': UA,
'Referer': 'https://space.bilibili.com/' + str(i) + '?from=search&seid=' + str(random.randint(10000, 50000))
}
jscontent = requests.session().post('http://space.bilibili.com/ajax/member/GetInfo',
headers=head,
data=payload,
).text
time2 = time.time()
try:
jsDict = json.loads(jscontent)
statusJson = jsDict['status'] if 'status' in jsDict.keys() else False
if statusJson == True:
if 'data' in jsDict.keys():
jsData = jsDict['data']
mid = jsData['mid']
name = jsData['name']
sex = jsData['sex']
rank = jsData['rank']
face = jsData['face']
regtimestamp = jsData['regtime']
regtime_local = time.localtime(regtimestamp)
regtime = time.strftime("%Y-%m-%d %H:%M:%S", regtime_local)
spacesta = jsData['spacesta']
birthday = jsData['birthday'] if 'birthday' in jsData.keys() else 'nobirthday'
sign = jsData['sign']
level = jsData['level_info']['current_level']
OfficialVerifyType = jsData['official_verify']['type']
OfficialVerifyDesc = jsData['official_verify']['desc']
vipType = jsData['vip']['vipType']
vipStatus = jsData['vip']['vipStatus']
toutu = jsData['toutu']
toutuId = jsData['toutuId']
coins = jsData['coins']
try:
res = requests.get(
'https://api.bilibili.com/x/relation/stat?vmid=' + str(mid) + '&jsonp=jsonp').text
viewinfo = requests.get(
'https://api.bilibili.com/x/space/upstat?mid=' + str(mid) + '&jsonp=jsonp').text
js_fans_data = json.loads(res)
js_viewdata = json.loads(viewinfo)
following = js_fans_data['data']['following']
fans = js_fans_data['data']['follower']
archiveview = js_viewdata['data']['archive']['view']
article = js_viewdata['data']['article']['view']
except:
following = 0
fans = 0
archiveview = 0
article = 0
else:
print('no data now')
except:
pass
if __name__ == "__main__":
pool = ThreadPool(5)
try:
results = pool.map(getsource, urls)
except Exception as e:
print(e)
pool.close()
pool.join()