自從學會Python爬蟲后,爬視頻我只爬小姐姐!教你批量下載某短視頻網站視頻!


你問我爬蟲最大的樂趣是什么?當然是爬小姐姐了~
在這里插入圖片描述
磚家說,看美女可以提高壽命,那為了長壽不得天天看。
再說了,我看美女只是為了心情愉悅,心情好才能做好事情嘛~
在這里插入圖片描述
當然我們都是正經人,都看正經的,別看這種,看多了營養跟不上~
在這里插入圖片描述
是吧,這誰頂得住啊

算了算了 ,走遠了,關注正題。
說說今天用的環境和 模塊啥的

在這里插入圖片描述
開發環境

  • Python版本:Python 3.6 / 3.8
  • 代碼編輯器:pycharm

模塊

  • requests、re
  • pip install requests

知識點

  1. requests 的簡單使用
  2. 正則表達式的簡單使用

大概思路

一、數據來源分析
(比較重要, 只有當你找到數據來源的時候, 你才能通過代碼去實現)
1、確定要爬取的內容 (梨視頻)
2、利用開發者工具(F12 或者 鼠標右鍵點擊檢查 選擇 network)進行抓包分析 (學爬蟲, 寫爬蟲程序) 開發者工具 要會使用
當我們要爬取多個視頻內容 數據內容 (要知道一個數據從哪里來的)
I、找到一個視頻播放的url地址
II、找這個播放地址的來源 >>>> videoInfo
真實的播放地址
https://video.pearvideo.com/mp4/adshort/20210823/cont-1739485-15752387_adpkg-ad_hd.mp4
假的播放地址
https://video.pearvideo.com/mp4/adshort/20210823/1629873733405-15752387_adpkg-ad_hd.mp4
III、獲取每一個視頻的 ID 就可以獲取所有視頻的播放地址

二、代碼實現步驟

  1. 發送請求 對於排行榜的url 發送請求
  2. 獲取數據 獲取網頁源代碼 (獲取響應體的文本數據 response.text)
  3. 解析數據 提取想要的 視頻ID 以及 視頻標題
  4. 發送請求 需要把視頻ID傳入 相應的數據包里面
  5. 獲取數據 獲取json字典數據
  6. 解析數據 提取 假的播放地址
  7. 構建真實url地址
  8. 數據保存
  9. 進行多頁/多個視頻內容 爬取

在這里插入圖片描述
要用到的模塊統統安排上

import requests  # 數據請求 第三方模塊 pip install requests
import re  # 正則表達式模塊
import pprint  # 格式化輸出模塊
import time  # 時間模塊
import os  # 文件操作的模塊

 

創建一個文件夾存放下載的視頻

filename = 'video\\'
if not os.path.exists(filename):
    os.mkdir(filename)

 

特殊字符全部給它替換掉

def change_title(title):
    mode = re.compile(r'[\\\/\*\"\?\<\>\|]')
    new_title = re.sub(mode, '_', title)
    return new_title

 

客戶端(瀏覽器)對於服務器發送請求, 服務器接收到請求之后, 會給客戶端返回數據 (通過前端的頁面渲染)
通過 python代碼 對於服務器發送請求, 被反爬, 沒有給你返回你想要的數據內容
需要把python代碼進行偽裝 : 請求頭 headers

for page in range(10, 101, 10):
    url = f'https://www.pearvideo.com/popular_loading.jsp?reqType=1&categoryId=&start={page}&sort=4&mrd=0.985271587548759'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    print(response.status_code)

 

返回的是響應體對象 200 狀態碼, 表示請求成功。
獲取響應體的文本屬性
response 返回的數據 和 elements 並不是一定是一樣的
print(response.text)
解析數據 , re正則表達式, css選擇器, xpath [哪一個最適合就那種]
.*? 匹配任意字符, \d+ 匹配多個數字,視頻ID都是數字
正則表達式,匹配出來的內容,返回的是列表

video_ids = re.findall('<a href="video_(\d+)" class="popularembd actplay">', response.text)
    titles = re.findall('<h2 class="popularem-title">(.*?)</h2>', response.text)

 

我們都知道 如果要提取列表中每一個元素 是需要遍歷 如果我們同時提取兩個列表呢?
.zip 壓縮包文件 zip(video_ids, titles) 返回是可迭代對象,可以遍歷, for循環可以提取出來。

 for video_id, title in zip(video_ids, titles):
        # video_id = i[0]
        # title = i[1]
        # print(video_id)
        # print(title)
        # 字符串格式化方法 '{video_id}'.format(video_id)
        new_title = change_title(title)
        link_url = f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.8988491099054703'
        print(link_url)

 

Referer : 告訴服務器, 我們請求的url地址 是從哪里跳轉過來的

headers_1 = {
   'Referer': f'https://www.pearvideo.com/video_{video_id}',
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
response_1 = requests.get(url=link_url, headers=headers_1)

 

print(response_1.json())
pprint.pprint(response_1.json())
對於json字典數據 可以直接根據鍵值對取值 根據冒號左邊的內容 提取冒號右邊的內容

src_url = response_1.json()['videoInfo']['videos']['srcUrl']
now_time = response_1.json()['systemTime']

 

replace 字符串替換的意思 就是 now_time 替換成 ‘cont-1739485’

video_url = src_url.replace(now_time, f'cont-{video_id}')
print(video_url)

 

now_time = int(time.time() * 1000)
print(now_time)
print(src_url)
獲取當前時間戳 直接替換掉
真實的播放地址
https://video.pearvideo.com/mp4/adshort/20210823/cont-1739485-15752387_adpkg-ad_hd.mp4
假的播放地址
https://video.pearvideo.com/mp4/adshort/20210823/1629873733405-15752387_adpkg-ad_hd.mp4
string_1 = ‘/’.join(src_url.split(’/’)[:-1])
string_2 = ‘-’.join(src_url.split(’-’)[1:])
video_url = string_1 + ‘/cont-’ + video_id + ‘-’ + string_2
print(video_url)

video_content = requests.get(url=video_url).content
        with open(filename + new_title + '.mp4', mode='wb') as f:
            f.write(video_content)
            print(title)

 

OK ,我們看看爬取結果
在這里插入圖片描述
在這里插入圖片描述
如果文章看不懂的話,也有詳細的視頻教程,都可以點我領取 ,包括完整代碼。
很多小伙伴因為沒有好的學習資料或者遇到問題不能及時得到解決,導致自己學不下去,這里小編給大家准備了大量學習資料,都可以點上面的(藍色點我領取)
Python 環境、pycharm編輯器/永久激活/翻譯插件
python 零基礎視頻教程
Python 界面開發實戰教程
Python 爬蟲實戰教程
Python 數據分析實戰教程
python 游戲開發實戰教程
Python 電子書100本
Python 學習路線規划
本節視頻源碼、課件、福利文件
都可以加群免費領取
Python 相關問題可解答
Python 相關外包需求可發布
Python 相關招聘需求可發布

在這里插入圖片描述


免責聲明!

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



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