Python爬取B站上的小視頻

大家平時空閒的時候都會有刷小視頻的習慣吧,我也會在B站上看一些視頻,今天就和大家分享一個用Python寫的一個自動爬取Bilibili小視頻的腳本,下面是項目實現的全部過程。

1.確定爬取目標

這次項目,我們爬取的是B站的每日小視頻排行榜前100的視頻資源,爬取的網址爲:「http://vc.bilibili.com/p/eden/rank#/?tab=全部」。

2.尋找API接口,生成爬蟲入口

在谷歌瀏覽器中,通過F12打開開發者模式,然後在NetWorking——Name字段下找到這個鏈接:http://api.vc.bilibili.com/board/v1/ranking/top?page_size=10&next_offset=&tag=%E4%BB%8A%E6%97%A5%E7%83%AD%E9%97%A8&platform=pc

在這個頁面中,再看一下Heagers屬性,找到Request URL這個屬性值,當我們向下滑動加載視頻的過程中,發現只有這個(http://api.vc.bilibili.com/board/v1/ranking/top?)URL是不變的。

next_offest屬性值會一直變化,它是獲取下一個視頻的序號,現在我們需要把這部分參數取出來,把next_offest寫成變量值,用JSON格式返回到目標網頁即可。

3. 編寫代碼

根據上面分析過程編寫代碼,寫代碼的時候要注意B站在一定程度上做了反爬操作,所以我們需要通過添加請求頭來僞裝瀏覽器,否則下載的視頻是空的;然後定義參數來儲存JSON數據,再通過requests.get去獲取其參數值信息。代碼如下:

defget_json(url):

headers = {

'User-Agent':

'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'

}

params = {

'page_size':10,

'next_offset': str(num),

'tag':'今日熱門',

'platform':'pc'

}

try:

html = requests.get(url,params=params,headers=headers)

returnhtml.json()

exceptBaseException:

print('request error')

pass

爲了能清楚的看到下載情況,在定義一個下載器,實現代碼如下:

def download(url,path):

start= time.time() # 開始時間

size=0

headers = {

'User-Agent':

'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'

}

response = requests.get(url,headers=headers,stream=True) # stream屬性必須帶上

chunk_size =1024# 每次下載的數據大小

content_size =int(response.headers['content-length']) # 總大小

ifresponse.status_code ==200:

print('[文件大小]:%0.2f MB'%(content_size / chunk_size /1024)) # 換算單位

withopen(path,'wb')asfile:

fordatainresponse.iter_content(chunk_size=chunk_size):

file.write(data)

size+=len(data) # 已下載的文件大小

效果如下:

這個小項目適合爬蟲入門的同學作爲練手項目,如果有感興趣的同學,後臺可以回覆「b站」獲取完整源代碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章