日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

B站在小視頻功能處提供了 API 接口,今天的任務爬取Bilibili視頻~

B 站視頻網址:https://vc.bilibili.com/p/eden/rank#/?tab=全部

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

此次爬取視頻,我們爬取前100個~

我們做好前期準備~

  • Chrome 瀏覽器 (能使用開發者模式的瀏覽器都行)
  • Vim (編輯器任選,老實人比較喜歡Vim界面,所以才用這個啦)
  • Python3 開發環境
  • Kali linux (其實隨便一個操作系統都行啦)

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

我們查看一下 Headers 屬性

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

非誠勿擾:正在學習python的小伙伴或者打算學習的,可以私信小編“01”領取資料!

我們可以看到Request URL這個屬性值,我們向下滑動加載視頻的過程中,發現只有這段url是不變的。

http://api.vc.bilibili.com/board/v1/ranking/top?

next_offset 會一直變化,我們可以猜測,這個可能就是獲取下一個視頻序號,我們只需要把這部分參數取出來,把 next_offset 寫成變量值,用 JSON 的格式返回到目標網頁即可。

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

代碼實現

我們通過上面的嘗試寫了段代碼,發現 B 站在一定程度上做了反爬蟲操作,所以我們需要先獲取 headers 信息,否則下載下來的視頻是空的,然后定義 params 參數存儲 JSON 數據,然后通過 requests.get 去獲取其參數值信息,用 JSON 的格式返回到目標網頁即可,實現代碼如下:

def get_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)
 return html.json()

 except BaseException:
 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']) # 總大小
 if response.status_code == 200:
 print('[文件大小]:%0.2f MB' %(content_size / chunk_size / 1024)) # 換算單位
 with open(path,'wb') as file:
 for data in response.iter_content(chunk_size=chunk_size):
 file.write(data)
 size += len(data) # 已下載的文件大小

效果如下:

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

將上面的代碼進行匯總,整個實現過程如下:

#!/usr/bin/env python#-*-coding:utf-8-*-import requestsimport randomimport timedef get_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)
 return html.json()

 except BaseException:
 print('request error')
 passdef 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']) # 總大小
 if response.status_code == 200:
 print('[文件大小]:%0.2f MB' %(content_size / chunk_size / 1024)) # 換算單位
 with open(path,'wb') as file:
 for data in response.iter_content(chunk_size=chunk_size):
 file.write(data)
 size += len(data) # 已下載的文件大小

 if __name__ == '__main__':
 for i in range(10):
 url = 'http://api.vc.bilibili.com/board/v1/ranking/top?'
 num = i*10 + 1
 html = get_json(url)
 infos = html['data']['items']
 for info in infos:
 title = info['item']['description'] # 小視頻的標題
 video_url = info['item']['video_playurl'] # 小視頻的下載鏈接
 print(title)

 # 為了防止有些視頻沒有提供下載鏈接的情況
 try:
 download(video_url,path='%s.mp4' %title)
 print('成功下載一個!')
 
 except BaseException:
 print('涼涼,下載失敗')
 pass

 time.sleep(int(format(random.randint(2,8)))) # 設置隨機等待時間

爬取效果圖如下:

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

結果:

用Python腳本自動爬取Bilibili視頻,你學會了嗎?

 

似乎爬取的效果還可以,當然喜歡的朋友不要忘記點贊分享轉發哦。

最后多說一句,小編是一名python開發工程師,這里有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,并在后臺私信小編:“01”即可領取。

作者:Angel_Kitty

鏈接:https://www.imooc.com/article/253157

來源:慕課網

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定