如何快速爬取B站全站視頻信息

大數據

作者:chenjiandongx

B 站我想大家都熟悉吧,其實 B 站的爬蟲網上一搜一大堆。不過?紙上得來終覺淺,絕知此事要躬行,我碼故我在。最終爬取到數據總量為?760萬?條。

準備工作

首先打開 B 站,隨便在首頁找一個視頻點擊進去。常規(guī)操作,打開開發(fā)者工具。這次是目標是通過爬取 B 站提供的 api 來獲取視頻信息,不去解析網頁,解析網頁的速度太慢了而且容易被封 ip。

勾選 JS 選項,F5 刷新

大數據

找到了 api 的地址

大數據

復制下來,去除沒必要的內容,得到?https://api.bilibili.com/x/web-interface/archive/stat?aid=15906633?,用瀏覽器打開,會得到如下的 json 數據

大數據

動手寫碼

好了,到這里代碼就可以碼起來了,通過 request 不斷的迭代獲取數據,為了讓爬蟲更高效,可以利用多線程。

核心代碼

result = []req = requests.get(url, headers=headers, timeout=6).json()time.sleep(0.6)     # 延遲,避免太快 ip 被封try:    data = req['data']    video = Video(        data['aid'],        # 視頻編號        data['view'],       # 播放量        data['danmaku'],    # 彈幕數        data['reply'],      # 評論數        data['favorite'],   # 收藏數        data['coin'],       # 硬幣數        data['share']       # 分享數    )    with lock:        result.append(video)except:    pass

迭代爬取

urls = ["http://api.bilibili.com/archive_stat/stat?aid={}".format(i)     for i in range(10000)] with futures.ThreadPoolExecutor(32) as executor:    # 多線程     executor.map(run, urls)

不要一次性爬取全部鏈接,我是利用兩個進程,這樣就是多進程+多線程了。一個進程一次大概爬取 50w 條數據。100w 條數據的話大概一個多小時吧。分多次爬取,分別將數據保存為不同的文件名,最后再匯總。

運行的效果大概是這樣的,數字是已經已經爬取了多少條鏈接,其實完全可以在一天或者兩天內就把全站信息爬完的。

大數據

至于爬取后要怎么處理就看自己愛好了,我是先保存為 csv 文件,然后再匯總插入到數據庫。

匯總的 csv 文件

大數據

數據庫表

大數據

由于這些內容是我在幾個月前爬取的,所以數據其實有些滯后了。

數據總量

大數據

查詢播放量前十的視頻

大數據

查詢回復量前十的視頻

大數據

各種花樣查詢任君選擇??!視頻的鏈接為?https://www.bilibili.com/video/av?+ v_aid

極客網企業(yè)會員

免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。

2017-11-03
如何快速爬取B站全站視頻信息
作者:chenjiandongx B 站我想大家都熟悉吧,其實 B 站的爬蟲網上一搜一大堆。不過?紙上得來終覺淺,絕知此事要躬行,我碼故我在。最終爬取到數據總

長按掃碼 閱讀全文