爬蟲---爬取b站小視頻


  前面通過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)

 

 

寫的時間有點緊急,大概的寫了下過程,如果不懂的地方可以下方留言,看到后第一時間會進行回復,感覺寫的對您有幫助,點個關注~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM