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