使用python爬取B站千萬(wàn)級(jí)數(shù)據(jù)
Python(發(fā)音:英[?pa?θ?n],美[?pa?θɑ:n]),是一種面向?qū)ο?、直譯式電腦編程語(yǔ)言,也是一種功能強(qiáng)大的通用型語(yǔ)言,已經(jīng)具有近二十年的發(fā)展歷史,成熟且穩(wěn)定。它包含了一組完善而且容易理解的標(biāo)準(zhǔn)庫(kù),能夠輕松完成很多常見(jiàn)的任務(wù)。它的語(yǔ)法非常簡(jiǎn)捷和清晰,與其它大多數(shù)程序設(shè)計(jì)語(yǔ)言不一樣,它使用縮進(jìn)來(lái)定義語(yǔ)句。
Python支持命令式程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)、函數(shù)式編程、面向切面編程、泛型編程多種編程范式。與Scheme、Ruby、Perl、Tcl等動(dòng)態(tài)語(yǔ)言一樣,Python具備垃圾回收功能,能夠自動(dòng)管理存儲(chǔ)器使用。它經(jīng)常被當(dāng)作腳本語(yǔ)言用于處理系統(tǒng)管理任務(wù)和網(wǎng)絡(luò)程序編寫(xiě),然而它也非常適合完成各種高級(jí)任務(wù)。Python虛擬機(jī)本身幾乎可以在所有的作業(yè)系統(tǒng)中運(yùn)行。使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python源代碼轉(zhuǎn)換成可以脫離Python解釋器運(yùn)行的程序。
粉絲獨(dú)白
說(shuō)起熱門(mén)的B站相信很多喜歡玩動(dòng)漫的,看最有創(chuàng)意的Up主的同學(xué)一定非常熟悉。我突發(fā)奇想學(xué)Python這么久了,為啥不用Python爬取B站中我關(guān)注的人,已經(jīng)關(guān)注的人他們關(guān)注的人,看看全站里面熱門(mén)的UP主都是是哪些。
要點(diǎn):
- 爬取10萬(wàn)用戶數(shù)據(jù)
- 數(shù)據(jù)存儲(chǔ)
- 數(shù)據(jù)詞云分析
1.準(zhǔn)備階段
寫(xiě)代碼前先構(gòu)思思路:既然我要爬取用戶關(guān)注的用戶,那我需要存儲(chǔ)用戶之間的關(guān)系,確定誰(shuí)是主用戶,誰(shuí)是follower。
存儲(chǔ)關(guān)系使用數(shù)據(jù)庫(kù)最方便,也有利于后期的數(shù)據(jù)分析,我選擇sqlite數(shù)據(jù)庫(kù),因?yàn)镻ython自帶sqlite,sqlite在Python中使用起來(lái)也非常方便。
數(shù)據(jù)庫(kù)中需要2個(gè)表,一個(gè)表存儲(chǔ)用戶的相互關(guān)注信息,另一個(gè)表存儲(chǔ)用戶的基本信息,在B站的用戶體系中,一個(gè)用戶的mid號(hào)是唯一的。
然后我還需要一個(gè)列表來(lái)存儲(chǔ)所以已經(jīng)爬取的用戶,防止重復(fù)爬取,畢竟用戶之間相互關(guān)注的現(xiàn)象也是存在的,列表中存用戶的mid號(hào)就可以了。
2.新建數(shù)據(jù)庫(kù)
先寫(xiě)建數(shù)據(jù)庫(kù)的代碼,數(shù)據(jù)庫(kù)中放一個(gè)用戶表,一個(gè)關(guān)系表:
3.爬取前5頁(yè)的用戶數(shù)據(jù)
我需要找到B站用戶的關(guān)注列表的json接口,很快就找到了,地址是:
https://api.bilibili.com/x/relation/followings?vmid=2&pn=1&ps=20&order=desc&jsonp=jsonp&callback=__jp7
其中vimd=后的參數(shù)就是用戶的mid號(hào)
pn=1指用戶的關(guān)注的第一面用戶,一面顯示20個(gè)用戶
因?yàn)锽站的隱私設(shè)置,一個(gè)人只能爬取其他人的前5頁(yè)關(guān)注,共100人。
整個(gè)爬取頁(yè)面的思路比較簡(jiǎn)單,首先設(shè)置header,用requests庫(kù)進(jìn)行API請(qǐng)求,獲得關(guān)注的用戶數(shù)據(jù)列表。
我們爬取前5頁(yè),每一頁(yè)的數(shù)據(jù)進(jìn)行簡(jiǎn)單的處理,然后轉(zhuǎn)為字典數(shù)據(jù)進(jìn)行獲取mid,uname,sign3個(gè)維度的數(shù)據(jù),最后save()函數(shù)存入db.
4.存入數(shù)據(jù)庫(kù)
我們數(shù)據(jù)集里面一共有2個(gè)表,一個(gè)用戶列表,用來(lái)存儲(chǔ)所以的用戶信息,一個(gè)是用戶之間的關(guān)注信息。
5.探秘是熱門(mén)UP主
打算利用已經(jīng)爬取到本地的數(shù)據(jù)進(jìn)行詞云的生成,來(lái)看一下這10萬(wàn)用戶中共同的關(guān)注的哪些UP主出現(xiàn)的次數(shù)最多。
代碼的思路主要是從數(shù)據(jù)庫(kù)中獲取用戶的名字,重復(fù)的次數(shù)越多說(shuō)明越多的用戶關(guān)注,然后我使用fate的一張圖片作為詞云的mask圖片,最后生成詞云圖片。
最后一起來(lái)看一下詞云圖
可以看出蕾絲,暴走漫畫(huà),木魚(yú)水心,參透之C君,papi醬等B站大UP主都是熱門(mén)關(guān)注。
Python可以做什么?
web開(kāi)發(fā)和 爬蟲(chóng)是比較適合 零基礎(chǔ)的
自動(dòng)化運(yùn)維 運(yùn)維開(kāi)發(fā) 和 自動(dòng)化測(cè)試 是適合 已經(jīng)在做運(yùn)維和測(cè)試的人員
大數(shù)據(jù) 數(shù)據(jù)分析 這方面 是很需要專業(yè)的 專業(yè)性相對(duì)而言比較強(qiáng)
科學(xué)計(jì)算 一般都是科研人員 在用
機(jī)器學(xué)習(xí) 和 人工智能 首先 學(xué)歷 要求高 其次 高數(shù)要求高 難度很大
相關(guān)文章
Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫(xiě)法)
這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫(xiě)法),對(duì)于字符串連接,相比于簡(jiǎn)單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識(shí)內(nèi)容吧2022-02-02使用Python一鍵提取PDF中的表格到Excel的方法詳解
從PDF文件獲取表格中的數(shù)據(jù),也是日常辦公容易涉及到的一項(xiàng)工作,一個(gè)一個(gè)復(fù)制吧,效率確實(shí)太低了,用Python從PDF文檔中提取表格數(shù)據(jù),并寫(xiě)入Excel文件,灰?;页8咝?本文就給大家介紹一下如何使用Python一鍵提取PDF中的表格到Excel,需要的朋友可以參考下2023-08-08Python網(wǎng)絡(luò)編程基于多線程實(shí)現(xiàn)多用戶全雙工聊天功能示例
這篇文章主要介紹了Python網(wǎng)絡(luò)編程基于多線程實(shí)現(xiàn)多用戶全雙工聊天功能,結(jié)合實(shí)例形式分析了Python網(wǎng)絡(luò)編程中使用多線程進(jìn)行多用戶異步通信的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04用python打包exe應(yīng)用程序及PyInstaller安裝方式
PyInstaller 制作出來(lái)的執(zhí)行文件并不是跨平臺(tái)的,如果需要為不同平臺(tái)打包,就要在相應(yīng)平臺(tái)上運(yùn)行PyInstaller進(jìn)行打包。今天通過(guò)本文給大家介紹用python打包exe應(yīng)用程序及PyInstaller安裝方式,感興趣的朋友一起看看吧2021-12-12Mac OS X10.9安裝的Python2.7升級(jí)Python3.3步驟詳解
Mac OS X10.9默認(rèn)帶了Python2.7,不過(guò)現(xiàn)在Python3.3.3出來(lái)了,如果想使用最新版本,趕緊升級(jí)下吧。基本步驟如下2013-12-12python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作
這篇文章主要介紹了python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作,需要的朋友可以參考下2017-09-09