python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数
前言
不少人對B站粉絲數有著強烈的“控制感”,特別是B站用戶“老番茄”的粉絲數要達到1000萬了,不少人想要見到突破1000w粉的那一瞬間,雖然有很多網站提供了B站粉絲走圖、粉絲統計等功能但是誰不想知道后面的原理呢?誰又不想獲得制作成功的那份成就呢?這篇文章,將會帶領您一起使用Python編程!
接口
如果你對B站用戶首頁有進行抓包,以 老番茄 為例,那你肯定會找到這樣一串數據:
地址:https://api.bilibili.com/x/web-interface/card?mid=546195
方式:GET
返回的數據為:返回數據
這一串數據里包含了 用戶姓名 、 用戶簡介 、用戶粉絲數等公開的個人信息。而我們需要的是粉絲數。認真分析一下后發現這串數據是一個字典,通過PyCharm分析應該為這個樣子:分析結果
假設這串字符在一個變量 Dict 里,那么粉絲數 應該表示為
Dict['data']['follower'] 或者為 Dict['data']['card']['fans'](有兩個地方標記)
開始編程
我們的思路如下:軟件思路
request.get() 函數是獲取網頁
json.loads() 函數是將json格式數據轉換為字典(可以這么理解,json.loads()函數是將字符串轉化為字典)
問題來了,這么獲取用戶數據呢?
用戶uid是什么?(不知道的退群吧)Uid獲取方法在地址欄老番茄個人空間
現在開始打代碼:代碼片段-1
import requests #導入requests模塊
UserUid = 546195 #定義用戶uid方便后面操作
data = requests.get('https://api.bilibili.com/x/web-interface/card?mid=%d'%(UserUid)) #GET網址獲取內容
print(data.text) #輸出數據
調試輸出的內容如下:代碼返回
但是返回的并不是字典,我們通過json.loads()進行轉化代碼片段-2
import requests #導入requests模塊
import json #導入json模塊
UserUid = 546195 #定義用戶uid方便后面操作
data = requests.get('https://api.bilibili.com/x/web-interface/card?mid=%d'%(UserUid)) #GET網址獲取內容
information = json.loads(data.text) #輸出數據
print(information)代碼返回
現在可以通過字典打印出發送數量了!
import requests # 導入requests模塊
import json # 導入json模塊
UserUid = 546195 # 定義用戶uid方便后面操作
data = requests.get('https://api.bilibili.com/x/web-interface/card?mid=%d' % (UserUid)) # GET網址獲取內容
information = json.loads(data.text) # 輸出數據
fans = information['data']['follower'] # 獲取用戶B站粉絲
# fans = information['data']['card']['fans'] #獲取用戶B站粉絲方法二
print(fans)
當然以此類推我們還可以獲取其它用戶的信息,如下圖:
information = json.loads(data.text) # 輸出數據
name = information['data']['card']['name']
uid = information['data']['card']['mid']
sex = information['data']['card']['sex']
sign = information['data']['card']['sign']
level = information['data']['card']['level_info']['current_level']
Authentication = information['data']['card']['Official']['title']
vip = (information['data']['card']['vip']['vipType'] == 2)
fans = information['data']['follower'] # 獲取用戶B站粉絲
# fans = information['data']['card']['fans'] #獲取用戶B站粉絲方法二
print("BiliBili用戶%s的信息\n"
"用戶名稱:%s\n"
"用戶UID:%s\n"
"用戶性別:%s\n"
"用戶簽名:%s\n"
"用戶等級:%d\n"
"用戶認證:%s\n"
"用戶是否為大會員:%s\n"
"用戶粉絲:%d"
%(name,name,uid,sex,sign,level,Authentication,vip,fans))
import time #導入time模塊
while True:
data = requests.get('https://api.bilibili.com/x/web-interface/card?mid=%d' % (UserUid)) # GET網址獲取內容
information = data.json()
fans = information['data']['follower']
print('B站用戶%s(uid:%s)目前粉絲數量為%d個。'%(name,uid,fans))
time.sleep(1)
一秒檢測一次B站用戶的粉絲數量,
順帶一提 data.json() 相當于 json.loads(data.text)
MaxFans變量用于比較用戶粉絲數是否達到指定的數值。
將MaxFans修改成與用戶最近的數量,并修改代碼:
if fans < MaxFans:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,還未達到用戶指定的%d個粉絲標準'%(name,uid,fans,MaxFans))
else:
print('*B站用戶%s(uid:%s)目前粉絲數量為%d個,已經達到用戶指定的%d個粉絲標準' % (name, uid, fans, MaxFans))
time.sleep(1)
讓我們再加入與上次數值的對比與一開始的統計。
對代碼進行優化:
if fans < MaxFans:
if fans-Lastfans > 0:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒增長了%d個,還未達到用戶指定的%d個粉絲標準。' % (name, uid, fans, fans - Lastfans, MaxFans))
elif fans-Lastfans <0:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒減少了%d個,還未達到用戶指定的%d個粉絲標準。' % (name, uid, fans, Lastfans-fans, MaxFans))
else:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒相比沒有增長,還未達到用戶指定的%d個粉絲標準。' % (name, uid, fans, MaxFans))
else:
if fans-Lastfans > 0:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒增長了%d個,已經達到用戶指定的%d個粉絲標準。' % (name, uid, fans, fans - Lastfans, MaxFans))
elif fans-Lastfans <0:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒減少了%d個,已經達到用戶指定的%d個粉絲標準。' % (name, uid, fans, Lastfans-fans, MaxFans))
else:
print('B站用戶%s(uid:%s)目前粉絲數量為%d個,與上一秒相比沒有增長,已經達到用戶指定的%d個粉絲標準。' % (name, uid, fans, MaxFans))
接下來我們開始添加郵件提醒功能,
在此之前我們先定義一個變量用于設定發郵件的次數。
我們先來演示一種Python email模塊使用smtp服務發件,
import email.mime.text
import email.utils
import smtplib
Text = "
祝賀B站用戶 %s (uid:%s) 于 %s 達到 %d 個粉絲\n" \
"
郵件由程序自動發送不必回復
" % (name,uid,time.strftime('%Y-%m-%d %H:%M:%S'),fans) #預要發送的郵件正文header = email.mime.text.MIMEText(Text, 'HTML') #開始構造郵件,傳入正文
header['From'] = email.utils.formataddr(('BiliBili粉絲提醒','422880152@qq.com')) #發件人,注意formataddr函數是規范發件人格式,要傳入元組
header['To'] = email.utils.formataddr(('我叫以賞', '422880152@qq.com')) #收件人,與發件人一致
header['Subject'] = u'B站用戶粉絲提醒' #標題(主題),注意編碼
SMTP = smtplib.SMTP() #創建SMTP類
SMTP.connect('smtp.qq.com',25) #連接服務器
SMTP.login('422880152@qq.com','------') #登錄服務器
SMTP.sendmail('422880152@qq.com','422880152@qq.com',header.as_string()) #發送郵件 發件人 收件人 header.as_string()函數是將構造好的郵件進行轉化為文本
SMTP.close() #斷開連接
如果配置正常應該會收到這樣的郵件,
再把判斷提醒次數的判斷寫進去
tip要在循環前先定義。
這樣就完成了,再加一個退出代碼
當然你對于一些無法發送郵件的系統,請去查看我上次的文章!
總結
以上是生活随笔為你收集整理的python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 后处理安装_你所不了解的国六后处理
- 下一篇: python字典可以切片吗_7.map(