python爬取b站用户_用Python爬取bilibili全站用户信息
教你用Python爬取嗶哩嗶哩全站用戶信息
運行
下載
git clone https://github.com/cexll/bili_user_Spider.git
復制代碼
運行環境
Windows/Ubuntu
Python 3.6
VSCode
依賴
requests
pymongo
mongodb
使用本腳本請先安裝好MongoDB,并且安裝好庫
pip install -r requirements.txt
復制代碼
運行
運行前請進入腳本把cookie和mid改成自己的方便第一時間給數據庫增加相應的數據
python3 spider.py
復制代碼
思路
這是用思維導圖畫的一個腳本的大致運行情況
程序的大致思路是這樣,通過mid進入用戶主目錄,然后獲取用戶個人信息并保存到數據庫,然后獲取用戶的粉絲數量以及關注數量方便之后計算頁數,下一步獲取所有的關注用戶mid以及粉絲用戶mid保存到數據庫,然后依次提取數據庫mid進入用戶主目錄循環至結束
運行過程
數據來源
數據通過bilibili官方api獲取除了獲取個人信息必須要進入用戶目錄才能成功獲取其他都可直接通過API獲取到數據
分析代碼
這里就上最主要的代碼
運行函數,首選進入用戶主頁然后獲取個人信息到數據庫
然后獲取粉絲數量以及關注數量
通過關注數量 / 50 得到頁數, 這里做了如果結果小于或等于1那么就直接當1,不然range(1, 1)是無法運行的
def run(mid):
"""
運行函數
"""
# 進入用戶主頁
get_space(mid)
# 獲取關注數量和粉絲數量
f, g = get_myinfo(mid)
# 獲取關注用戶信息
f_g_ps = 50
f_g_pn = int(g / f_g_ps)+1
if f_g_pn <= 1:
get_followers(mid, 1, f_g_ps)
else:
for g_pn in range(1, f_g_pn):
get_followings(mid, g_pn, f_g_ps)
# 獲取粉絲用戶信息
f_r_ps = 50
f_r_pn = int(f / f_r_ps)+1
print(f_r_pn)
if f_r_pn <= 1:
get_followers(mid, 1, f_r_ps)
else:
for r_pn in range(1, f_r_pn):
get_followers(mid, r_pn, f_r_ps)
# 循環
rep_run()
復制代碼
核心代碼
這里MIN必須要先初始值,就設置了一個全局變量,進入rep_run,MIN變量加一,連接list數據庫,查詢數據庫所有信息保存到result,max是從數據庫提取出來的信息最大count,接下來判斷MIN是否大于max,如果大于則說明數據庫數據已經運行完了,直接結束腳本,如果不大于則繼續循環
def rep_run():
"""
當上一個mid所有事情完成后進入此函數進行循環爬取下一個mid
"""
global MIN
# 每次運行此函數使MIN加一,不能大于max(數據庫count)
MIN += 1
collection = db.list
# 查詢數據庫所有數據保存到result
if collection.find({'id': MIN}):
ran = collection.find({'id': MIN})
# 查詢數據庫有多少條
count = collection.find({}).count()
for x in ran:
mid = x.get('mid')
if MIN > count:
print('程序即將停止運行,所有信息爬取完成')
time.sleep(10)
exit()
else:
run(mid)
else:
print('數據庫沒有該數據 id: {}'.format(MIN))
復制代碼
分析
2018-9-12 現已有10W數據進行簡單數據分析各位看官看看就好
性別分布情況
? 可以看到,還是有非常多的人不愿意透露性別的(.....)
用戶增長情況
這1970年都有大哥注冊了,真是元老啊.....但是很少,大部分元老包括b站官方站長等也是2009年
?
由于一些小問題小坑,已經將數據保存部分進行重寫,這次使用了MySQL,有興趣的可以去Github看看
總結
以上是生活随笔為你收集整理的python爬取b站用户_用Python爬取bilibili全站用户信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python find函数 和index
- 下一篇: 胸内科检查什么