前面通過python爬蟲爬取過圖片,文字,今天我們一起爬取下b站的小視頻,其實呢,測試過程中需要用到視頻文件,找了幾個網站下載,都需要會員什么的,直接寫一篇爬蟲爬取視頻~~~
分析b站小視頻
1、進入到抓取鏈接地址
http://vc.bilibili.com/p/eden/rank#/?tab=%E5%85%A8%E9%83%A8
2、分析抓取鏈接內容
通過F12或者抓包工具進行查看我們需要爬取的視頻在哪里存放,頁面以ajax動態加載的
3、分析請求內容和請求參數
通過查看請求內容得到這些數據
1、請求的接口地址
2、請求方式為get
3、請求參數為
- page_size 顯示的個數
- next_offset 動態跳轉頁面
- tag 搜索標題
- platfrom (應該是pc端)
分析了頁面內容,那么動手來寫代碼,爬取視頻下來
爬取b站小視頻
開始寫代碼之前呢,我們也要一步一步的來,分清楚每一步都是干什么用的,這樣的話才能讓我們寫的代碼更加清除。
1、構建請求信息,請求需要爬取的地址
# 構建請求信息,獲取數據信息 def get_json(url,ajax): # 構建請求信息 params = { 'page_size':10, 'next_offset': ajax, 'tag':'今日熱門', 'platform':'pc' } # 防止請求失敗 try: html = requests.get(url,params=params,headers=headers).json() return html except BaseException: print('頁面加載失敗')
2、進行訪問鏈接,下載視頻
# 獲取視頻信息 def get_video(viedeo_url,path): # 取出來視頻的名稱和地址 r2 = requests.get(viedeo_url,headers=headers) with open(path,'wb')as f: f.write(r2.content)
3、保存下載的視頻
infos=html['data']['items'] for info in infos: title = info['item']['description']#小視頻的標題 video_url = info['item']['video_playurl']#視頻地址 print(title,video_url) #為了防止視頻沒有video_url try: get_video(video_url,path=r"E:\app\視頻\%s.mp4"%title) print("成功下載一個") except BaseException: print("下載失敗") pass
完整代碼
import requests import random import time headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36" } def get_json(url,ajax): # 構建請求信息 params = { 'page_size':10, 'next_offset': ajax, 'tag':'今日熱門', 'platform':'pc' } # 防止請求失敗 try: html = requests.get(url,params=params,headers=headers).json() return html except BaseException: print('頁面加載失敗') def get_video(viedeo_url,path): # 取出來視頻的名稱和地址 r2 = requests.get(viedeo_url,headers=headers) with open(path,'wb')as f: f.write(r2.content) if __name__ == '__main__': for i in range(3): url='http://api.vc.bilibili.com/board/v1/ranking/top?' num=i*10+1 html=get_json(url,num) infos=html['data']['items'] for info in infos: title = info['item']['description']#小視頻的標題 video_url = info['item']['video_playurl']#視頻地址 print(title,video_url) #為了防止視頻沒有video_url try: get_video(video_url,path=r"E:\app\視頻\%s.mp4"%title) print("成功下載一個") except BaseException: print("下載失敗") pass # 設置加載時間 time.sleep(random.random() * 3)
寫的時間有點緊急,大概的寫了下過程,如果不懂的地方可以下方留言,看到后第一時間會進行回復,感覺寫的對您有幫助,點個關注~~~~