心血來潮搞了一個簡單的爬蟲,主要是想知道某個人的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)
哦對,加個參考。。。