Python采集某網(wǎng)站小視頻內(nèi)容, m3u8內(nèi)容下載

前言

大家早好丐一、午好、晚好吖~

環(huán)境使用:

  • Python 3.8

  • Pycharm


模塊使用:

  • import requests >>> pip install requests

內(nèi)置模塊 你安裝好python環(huán)境就可以了

  • import re

  • import json


模塊安裝問(wèn)題:

如果安裝python第三方模塊:

  1. win + R 輸入 cmd 點(diǎn)擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車(chē)

  2. 在pycharm中點(diǎn)擊Terminal(終端) 輸入安裝命令

安裝失敗原因:


如何配置pycharm里面的python解釋器?

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Project(項(xiàng)目) >>> python interpreter(python解釋器)

  2. 點(diǎn)擊齒輪, 選擇add

  3. 添加python安裝路徑


pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設(shè)置) >>> Plugins(插件)

  2. 點(diǎn)擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese

  3. 選擇相應(yīng)的插件點(diǎn)擊 install(安裝) 即可

  4. 安裝成功之后 是會(huì)彈出 重啟pycharm的選項(xiàng) 點(diǎn)擊確定, 重啟即可生效

如何實(shí)現(xiàn)蟲(chóng)案例: <思路流程 --> 通用>

一. 數(shù)據(jù)來(lái)源分析

  1. 分析清楚我們想要數(shù)據(jù)內(nèi)容, 是在什么地方, 什么樣子的

使用開(kāi)發(fā)者工具進(jìn)行抓包分析: 視頻數(shù)據(jù)以及視頻標(biāo)題

I. F12 或者 右鍵點(diǎn)擊檢查選擇network 刷新網(wǎng)頁(yè)

這么多數(shù)據(jù)包, 我想要視頻數(shù)據(jù)在什么地方?

  • M3U8 視頻格式: 把整個(gè)完整的視頻內(nèi)容, 分為N個(gè)視頻片段, 每個(gè)片段都是幾秒鐘 <看多少就加載多少>

所有視頻片段 <ts文件> 都包含在 m3u8 的文件鏈接里面

II. 在開(kāi)發(fā)者工具里面 直接搜索m3u8 可以直接找相對(duì)應(yīng)鏈接地址

繼續(xù)分析 這個(gè) m3u8 url地址是從哪里過(guò)來(lái) 在什么地方有

III. 我們想要視頻數(shù)據(jù) <m3u8鏈接> 在 網(wǎng)頁(yè)源代碼里面有

獲取整個(gè)視頻內(nèi)容 ---> 分為N個(gè)視頻片段<ts文件> ---> 在m3u8鏈接里面 ---> 視頻播放詳情頁(yè)網(wǎng)頁(yè)源代碼里面

二. 代碼實(shí)現(xiàn)步驟:

  1. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于視頻播放詳情頁(yè)url發(fā)送請(qǐng)求

  2. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
    開(kāi)發(fā)者工具里 response

  3. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容
    - m3u8鏈接
    - 視頻標(biāo)題

  4. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于 m3u8鏈接 發(fā)送請(qǐng)求
    由第三步提取出來(lái)鏈接發(fā)送請(qǐng)求

  5. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)
    開(kāi)發(fā)者工具里 response <對(duì)應(yīng)所有ts文件鏈接>

  6. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容
    所有ts文件鏈接

  7. 保存數(shù)據(jù), 把所有視頻片段內(nèi)容保存下來(lái), 并且合成為一個(gè)完整視頻內(nèi)容

  8. 多頁(yè)數(shù)據(jù)采集

代碼展示

導(dǎo)入模塊

# 導(dǎo)入數(shù)據(jù)請(qǐng)求模塊 ---> 要安裝 在cmd里面 pip install requests
import requests
# 導(dǎo)入正則模塊  ---> 內(nèi)置模塊 不需要安裝
import re
# 導(dǎo)入json模塊  ---> 內(nèi)置模塊 不需要安裝
import json
# 導(dǎo)入格式化輸出模塊  ---> 內(nèi)置模塊 不需要安裝
from pprint import pprint

1. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于 視頻播放詳情頁(yè)url 發(fā)送請(qǐng)求

  • 偽裝代碼 --> headers 請(qǐng)求頭

    1. 在開(kāi)發(fā)者工具里面進(jìn)行復(fù)制粘貼 <UA, cookie host referer>

    2. 請(qǐng)求頭 字典數(shù)據(jù)類(lèi)型, 構(gòu)建完整鍵值對(duì)

  • <Response [200]> 響應(yīng)對(duì)象

    200 狀態(tài)碼 表示請(qǐng)求成功

如果想要多個(gè)視頻內(nèi)容, 就要把視頻ID獲取下來(lái) <動(dòng)態(tài)數(shù)據(jù)加載>

分段寫(xiě)請(qǐng)求鏈接:

  • 問(wèn)號(hào)左邊的內(nèi)容 屬于鏈接

  • 問(wèn)號(hào)右邊的內(nèi)容 屬于請(qǐng)求參數(shù)/查詢(xún)參數(shù)

批量替換內(nèi)容:

  • 選中替換的內(nèi)容, 按 ctrl + R 點(diǎn)選正則<.*>

  • 正則命令匹配數(shù)據(jù) 替換

(.*?): (.*)
'$1': '$2',

請(qǐng)求鏈接

請(qǐng)求參數(shù)

data = {
    'quickViewId': 'ac-space-video-list',
    'reqID': '13',
    'ajaxpipe': '1',
    'type': 'video',
    'order': 'newest',
    'page': '2',
    'pageSize': '20',
    't': '1666360290070',
}

模擬偽裝

headers = {
    # User-Agent 用戶(hù)代理 表示瀏覽器基本身份信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}

發(fā)送請(qǐng)求

response_1 = requests.get(url=link, params=data, headers=headers)

解析數(shù)據(jù)

video_id_list = re.findall('atomid.*?":.*?"(\d+).*?",', response_1.text)
# for循環(huán)遍歷
for video_id in video_id_list:
    # 發(fā)送請(qǐng)求
    response = requests.get(url=url, headers=headers)

2. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

  • 開(kāi)發(fā)者工具里 response

response.text 獲取響應(yīng)文本數(shù)據(jù) <網(wǎng)頁(yè)源代碼>

3. 解析數(shù)據(jù), 提取我們想要的數(shù)據(jù)內(nèi)容

  • m3u8鏈接

  • 視頻標(biāo)題

調(diào)用re模塊里面findall方法, 去找到所有我們想要的數(shù)據(jù)內(nèi)容

re.findall('什么數(shù)據(jù)', '什么地方')

從什么地方去找你想要的什么數(shù)據(jù)

response.text 這里面 去找 "title":"(.*?)", 其中 (.*?) 是我們要的數(shù)據(jù)

[1] 列表索引位置取值

表示提取列表里面第二個(gè)元素

提取標(biāo)題

    title = re.findall('"title":"(.*?)",', response.text)[1]

提取視頻信息

--> 字符串?dāng)?shù)據(jù)類(lèi)型

    html_data = re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]

轉(zhuǎn)數(shù)據(jù)類(lèi)型: 方便取值

---> 字典數(shù)據(jù)類(lèi)型 鍵值對(duì)取值: 根據(jù)冒號(hào)左邊的內(nèi)容[鍵], 提取冒號(hào)右邊的內(nèi)容[值]

    json_data = json.loads(html_data)

提取 m3u8鏈接

    m3u8_url = json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]

4. 發(fā)送請(qǐng)求, 模擬瀏覽器對(duì)于 m3u8鏈接 發(fā)送請(qǐng)求

由第三步提取出來(lái)鏈接發(fā)送請(qǐng)求

5. 獲取數(shù)據(jù), 獲取服務(wù)器返回響應(yīng)數(shù)據(jù)

開(kāi)發(fā)者工具里 response <對(duì)應(yīng)所有ts文件鏈接

xpath 標(biāo)簽節(jié)點(diǎn)提取數(shù)據(jù)內(nèi)容

re 是可以直接對(duì)于字符串?dāng)?shù)據(jù)進(jìn)行解析提取

css 根據(jù)標(biāo)簽屬性提取數(shù)據(jù)內(nèi)容

requests parsel re csv selenium

    # 發(fā)送請(qǐng)求 + 獲取數(shù)據(jù)
    m3u8_data = requests.get(url=m3u8_url, headers=headers).text
    # 提取我們想要ts鏈接  跟上 6  有不明白 5  split() 分割字符串分割 --> 列表
    m3u8_data = re.sub('#E.*', '', m3u8_data).split()
    print(title)
    # for循環(huán)遍歷 提取我們想要ts文件鏈接, 把列表里面元素 一個(gè)一個(gè)提取出來(lái)
    for ts in m3u8_data:

字符串拼接 構(gòu)建完整鏈接地址

7. 保存數(shù)據(jù)

--> 需要發(fā)送請(qǐng)求 + 獲取數(shù)據(jù)

        ts_content = requests.get(url=ts_url, headers=headers).content
        with open('video\\' + title + '.mp4', mode='ab') as f:
            # 寫(xiě)入數(shù)據(jù)
            f.write(ts_content)
        print(ts_url)






寧外給大家推薦一個(gè)好的教程:
【48小時(shí)搞定全套教程!你和大佬只有一步之遙【python教程】

尾語(yǔ) ??

好了,我的這篇文章寫(xiě)到這里就結(jié)束啦!

有更多建議或問(wèn)題可以評(píng)論區(qū)或私信我哦妄荔!一起加油努力叭(? ?_?)?

喜歡就關(guān)注一下博主,或點(diǎn)贊收藏評(píng)論一下我的文章叭5簟@沧狻!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荒揣,一起剝皮案震驚了整個(gè)濱河市篷角,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌系任,老刑警劉巖恳蹲,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異俩滥,居然都是意外死亡嘉蕾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)霜旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)错忱,“玉大人,你說(shuō)我怎么就攤上這事挂据∫郧澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵崎逃,是天一觀的道長(zhǎng)掷倔。 經(jīng)常有香客問(wèn)我,道長(zhǎng)个绍,這世上最難降的妖魔是什么勒葱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮巴柿,結(jié)果婚禮上错森,老公的妹妹穿的比我還像新娘。我一直安慰自己篮洁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布殃姓。 她就那樣靜靜地躺著袁波,像睡著了一般瓦阐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篷牌,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天睡蟋,我揣著相機(jī)與錄音,去河邊找鬼枷颊。 笑死戳杀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夭苗。 我是一名探鬼主播信卡,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼题造!你這毒婦竟也來(lái)了傍菇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤界赔,失蹤者是張志新(化名)和其女友劉穎丢习,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淮悼,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡咐低,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了袜腥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片见擦。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖瞧挤,靈堂內(nèi)的尸體忽然破棺而出锡宋,到底是詐尸還是另有隱情,我是刑警寧澤特恬,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布执俩,位于F島的核電站,受9級(jí)特大地震影響癌刽,放射性物質(zhì)發(fā)生泄漏役首。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一显拜、第九天 我趴在偏房一處隱蔽的房頂上張望衡奥。 院中可真熱鬧,春花似錦远荠、人聲如沸矮固。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)档址。三九已至盹兢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間守伸,已是汗流浹背绎秒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留尼摹,地道東北人见芹。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蠢涝,于是被迫代替她去往敵國(guó)和親玄呛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345