測試 OK
II 在開發者工具里面 直接搜索m3u8 可以直接找相對應連接地址繼續分析 這個m3u8 url地址是從哪里過來的 在什么地方有
III 我們想要視頻數據 <m3u8連接> 在 網頁源代碼里面有獲取整個視頻內容 --》分為N個視頻片段《ts文件》-->在m3u8連接里面--> 視頻播放詳情頁面源代碼里面二、代碼實現步驟1.發送請求, 模擬瀏覽器對于視頻播放詳情頁url發送請示https://www.acfun.cn/v/ac473438502.獲取數據,獲取服務器返回響應數據開發者工具里 response3.解析數據,提取我們想要的數據內容m3u8連接視覺標題4.發送請求。模擬瀏覽男友對于,m3u8連接 發送請求由第三步提取出來連接發送請求5.獲取數據,獲取服務器返回響應數據開發者工具里 response 對應所有ts文件連接6.解析數據,提取我們想要的數據內容所有ts文件連接7.保存數據,把所有視頻片段內容保存下載,并且合成一個完整視頻內容8.多頁數據采集
#導入數據請求模塊 要安裝 在cmd里面 pip install requests
import requests
# 導入正則模塊-->內置模塊,不要安裝
import re
# 導入json 模塊 -->內置模塊,不要安裝
import json
#導入格式化輸出模塊 -->內置模塊,不要安裝
from pprint import pprint
#確定請求連接 <視頻詳情頁>
reqUrl = "https://www.acfun.cn/v/ac47343850"
# 模擬請求頭
# Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
reqHeaders = {# 用戶代理 表示瀏覽"user-agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36"
}
#發送請求
response = requests.get(url=reqUrl, headers=reqHeaders)
#<Response [200]>
#print(response)
#2.獲取數據,獲取服務器返回響應數據(網頁源代碼)
# 開發者工具里 response
# response.text 獲取響應文本數據<網頁源代碼>
#print(response.text)#3.解析數據,提取我們想要的數據內容
# -m3u8鏈接
# -視頻標題
# 調用re模塊里面的findall方法,去找到所有我們想要的數據內容
# re.findall('找什么數據','在什么地方找');
#title = re.findall('<title>"(.*?)"</title>',response.text);
# findall 返回的是一個列表
title = re.findall(r'<title >(.*?)</title>', response.text)[0] # 非貪婪匹配避免截斷:ml-citation{ref="3" data="citationList"}
title = title.replace('!','').replace('','').replace('-','').replace('AcFun彈幕視頻網','').replace('認真你就輸啦','')
#print("title: "+title)html_dta = re.findall('window.pageInfo = window.videoInfo = (.*?);',response.text)[0]
#print(html_dta);
# 轉數據類型: 方便取值 --> 字典數據類型 鍵值對取值
json_data = json.loads(html_dta)
#print(json_data)#pprint(json_data)
#pprint(json_data['currentVideoInfo']['ksPlayJson'])
json_Str = json_data['currentVideoInfo']['ksPlayJson']
#print(json_Str)
#pprint(json.loads(json_Str))
m3u8_url = json.loads(json_Str)['adaptationSet'][0]['representation'][0]['backupUrl'][0]
#print(m3u8_url)
#print(json_data)
#pprint(json.loads(json_data))"""
4.發送請求。模擬瀏覽男友對于,m3u8連接 發送請求由第三步提取出來連接發送請求
5.獲取數據,獲取服務器返回響應數據開發者工具里 response 對應所有ts文件連接
"""
m3u8_data = requests.get(url=m3u8_url,headers=reqHeaders).text
#print(m3u8_data)# 提取我們想要的ts鏈接
# #EXTINF:5.000000,
m3u8_data = re.sub('#E.*','',m3u8_data).split()
#print(m3u8_data)
# for遍歷,提取我們想要ts文件鏈接,把列表里面元素 一個一個提取出來count = len(m3u8_data)
print(count)
index = 0
for ts in m3u8_data:#print(ts)# https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts#print(ts_url)#7. 保存數據 --> 需要發送請求 + 獲取數據, content 保存二進制數據,保存成文件時使用ts_content = requests.get(url=ts_url,headers=reqHeaders).contentwith open('video\\【溫】最有活力的一集.mp4',mode='ab') as f:# 寫入數據f.write(ts_content)print("index:"+ str(index) +","+ts_url)index = index + 1