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