1. 程式人生 > >一個簡單的爬取b站up下所有視訊的所有評論資訊的爬蟲

一個簡單的爬取b站up下所有視訊的所有評論資訊的爬蟲

心血來潮搞了一個簡單的爬蟲,主要是想知道某個人的b站賬號,但是你知道,b站在搜尋一個使用者時,如果這個使用者沒有投過稿,是搜不到的,,,這時就只能想方法搞到對方的mid,,就是 space.bilibili.com/9444976 後面的那一串數字。偶然看到這個人關注了某個主播,,想到可能這個人會回覆主播的視訊,於是想著爬到所有up下的視訊的評論對應的使用者,這樣我就可以在資料庫裡檢索暱稱得到mid,,,嘿嘿嘿(然而失敗了,,不是所有人都像我這麼無聊,,,,有些人真的看視訊不會回覆,,

專案地址: https://github.com/31415926535x/CollegeProjectBackup/tree/master/BilibiliSpiders

這個爬蟲的主要功能是爬取某個指定up主下的所有視訊中的評論(不包括評論的回覆,當然可以實現,但是感覺都差不多,就沒考慮這塊),最後將爬到的使用者資料存到資料庫裡。整個專案只是抱著學習相關內容的心態來完成,不要做大批量的爬取網站(DDOS)及其敏感資料的事,也不要用作商業用途,,(雖然寫的很醜,,,)

簡要說明

整個專案的分為三個部分,首先是爬取指定mid up的所有視訊的av號,即 CrawlAllVideosOfAUP.py 這個指令碼,使用的api是 https://api.bilibili.com/x/space/arc/search?mid=mid&ps=30&tid=0&pn=pn&keyword=&order=pubdate&jsonp=jsonp

具體的說明見指令碼內註釋。

之後有了所有的av號,使用 CrawlCommentUsersByVideo.py 爬取指定av號下的所有評論,使用的api是 https://api.bilibili.com/x/v2/reply?pn=**&type=1&oid=***&sort=2 爬取av號為 oid 下第 pn 頁的評論的資訊(sort對應的應該是評論的展示順序用不到沒管。可以爬取到很多的資訊,根據自己需求來修改指令碼計科。

最後將這兩個整合,加一點點細節就行了,,大致是一個能用的指令碼(雖然最後沒有找到我想要的一個資訊,,,,

具體看註釋吧,,很簡單的一些東西吧,,長見識為主,留印象。。。。

總結

之前很早就接觸了Python爬蟲,,但是隻是用一下就扔了,沒有自己完全的編寫一個,,所以心血來擦寫一個練練手,,說不定以後還會遇到這樣類似的事,,,

這個指令碼最後將爬取到的資料扔到了資料庫裡,,因為之前看別人的程式碼,他是獲取一條寫入一條,,資料量一大就很慢,,(尤其是用了執行緒一邊獲取一遍寫入時,因為爬蟲一次會獲得很多的資料,但是如果儲存資料庫時一條一條的 commit 些磁碟的io瓶頸就會顯露出來,,所以可以加一個 flag ,寫入到1000或者某個值時再 commit 這樣就很有效率了,,跑偏了)

大概瞭解了一下python下的執行緒的寫法,思路都是那個思路,,算是簡單的見識一下,,,

關於windows下的mysql資料庫:我們通常會備份一個數據庫的某些表的結構到一個檔案中,例如 233.sql ,使用的命令可能是 mysqldump -uroot -p databases > 233.sql 等等類似的,,但是這個命令在windows的 PowerShell 會有bug,,具體原因沒有深究(猜測是編碼的鍋),匯出的檔案不能使用 source 233.sql 匯入,,會爆什麼 '\0' 等 ASCII錯誤,,這時的解決方法就是換 cmd ,,這個錯誤第一次見,,而且不好解決,,迷惑性太大,,容易帶偏QAQ,,,太浪費時間了,,,

好像沒啥了。。。(end)

哦對,加個參考。。。

這是一個暴力爬所有使用者資訊的,思路差不多的

這個也是,簡單些的

user-agents看到一個很全的ua,因為我的資料量不大,所以就沒用,記錄一