事情是這樣的,昨晚室友悄咪咪的拉著我去他的電腦,說帶我欣賞一點高雅的作品,于是這一坐下,便是一晚上…
作為一個樂于分享的博主,本來我是決定直接分享的,但是轉念一想,授人以魚不如授人以漁,我還是直接出教程方便大家以后遇到了喜歡的,也能及時下載保存。
一、準備一下
開發(fā)環(huán)境
Pycharm
python 3.8
ffmpeg
模塊的使用
requests
re
subprocess
二、基本思路流程
1、明確需求
采集下破站視頻數據
通過開發(fā)者工具進行抓包分析,分析破站視頻數據的來源。
開發(fā)者工具的使用
打開方式:
- 鼠標右鍵點擊檢查選擇Network
- F12
- ctrl + shift + i
想要開發(fā)者工具中有數據加載, 需要 刷新網頁。
通過元素(Element)面板,我們能查看到想抓取頁面渲染內容所在的標簽、使用什么 CSS 屬性(例如:class=“middle”)等內容。例如我想要抓取我知乎主頁中的動態(tài)標題,在網頁頁面所在處上右擊鼠標,選擇“檢查”,可進入 Chrome 開發(fā)者工具的元素面板。
網絡(Network)面板記錄頁面上每個網絡操作的相關信息,包括詳細的耗時數據、HTTP 請求與響應標頭和 Cookie,等等。這就是我們通常說的抓包。
Requests Table參數:
all:所有請求數據(圖片、視頻、音頻、js代碼、css代碼)
XHR:XMLHttpRequest 的縮寫,是ajax技術的核心,動態(tài)加載完成經常分析的一個內容
CSS: css樣式文件
JS:JavaScript文件,js解密是常分析的一個頁面
Img: Images 圖片文件
Font: 字體文件(字體反扒)
DOC : Document,文檔內容
WS: WebSocket,web端的socket數據通信,一般用于一些實時更新的數據
Requests詳情:
請求頭
Headers 是顯示 HTTP 請求的 Headers,我們通過這個能看到請求的方式,以及攜帶的請求參數等。
-
General
Request url :實際請求的網址
Request Method: 請求方法
Status Code: 狀態(tài)碼,成功時為 200
-
Response Headers
服務器返回時設置的一些數據,例如服務器更新的cookie數據最新是在這里出現修改。
-
Requests Headers
請求體,請求不到數據的原因一般出在這里,反扒也是反扒請求體里面的數據。
Accept:服務器接收的數據格式(一般忽略)
Accept-Encoding: 服務器接收的編碼(一般忽略)
Accept-Language: 服務器接收的語言(一般忽略)
Connection: 保持連接(一般忽略)
Cookies: cookies信息,是身份信息,爬取VIP資源是需要攜帶身份信息。
Host: 請求的主機地址
User-Agent: 用戶身份代理,服務器根據這個判斷用戶的大概信息。
Sec-xxx-xxx: 其他信息,可能沒用,可能是反扒,具體情況具體分析。
預覽
Preview 是請求結果的預覽。一般用來查看請求到的圖片,對于抓取圖片網站比較給力。
響應體
Response 是請求返回的結果。一般的內容是整個網站的源代碼。如果該請求是異步請求,返回的結果內容一般是 Json 文本數據。
此數據與瀏覽器展示的網頁可能不一致,因為瀏覽器是動態(tài)加載的。
2、數據來源分析
所以可以根據里面的參數在開發(fā)者工具里面進行搜索
通過結果可得 playurl 就是我們想要的數據
既然我們知道了, 數據的來源, 接下來就要分析, 這個數據包url中有那些參數是我們需要去找尋分析的…
因為我們這個只是找到一個B站視頻的數據, 如果想要獲取多個那肯定是需要分析的。
通過請求參數對比, 我們現在所需要找的參數就是 cid , bvid , session
同樣可以直接在開發(fā)者工具里面搜索 這些參數來源 bvid 就是B站視頻對應的ID
**cid / session 在網頁源代碼里面就可以獲取的 **
3、總結
通過以上分析可得:
- 首先獲取 cid session 這兩個參數, 順帶在獲取視頻標題
- 把cid session 以及 bv號 傳入數據包內
- 最后再獲取 音頻數據 以及 視頻畫面數據
三、代碼實現步驟
可以發(fā)現, 關于python爬蟲的流程思路分析, 所涉及的知識點還是比較多的。
- 發(fā)送請求, 對于視頻詳情頁url地址發(fā)送請求
- 獲取數據, 獲取響應體的文本數據 response.text
- 解析數據, 通過正則表達式提取數據內容: 視頻標題 cid session
- 發(fā)送請求, 對于視頻內容數據包url發(fā)送請求
- 獲取數據, 獲取響應體的json字典數據 response.json()
- 解析數據, 通過字典鍵值對取值, 提取音頻url 視頻url
- 保存數據, 對于音頻url 視頻url發(fā)送請求 獲取響應體二進制數據 response.content
- 合成數據, 把音頻內容以及視頻畫面內容合成為一個完整的mp4文件
四、代碼實現
1、發(fā)送請求
import requests
import re
import subprocess
headers = {
'referer': 'https://www.****.com',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
}
def get_response(html_url):
"""發(fā)送請求"""
response = requests.get(url=html_url, headers=headers)
return response
2、獲取視頻標題/cid/session
def get_video_info(html_url):
"""獲取 cid session 視頻標題"""
response = get_response(html_url)
cid = re.findall('"cid":(\d+),', response.text)[0]
session = re.findall('"session":"(.*?)"', response.text)[0]
title = re.findall('<h1 title="(.*?)" class="video-title">', response.text)[0].replace(' ', '')
video_info = [cid, session, title]
return video_info
3、獲取音頻url/視頻url
def get_video_content(cid, session, bvid):
"""獲取音頻內容以及視頻內容"""
index_url = 'https://api.****.com/x/player/playurl'
data = {
'cid': cid,
'qn': '80',
'type': '',
'otype': 'json',
'fourk': '1',
'bvid': bvid,
'fnver': '0',
'fnval': '976',
'session': session,
}
json_data = requests.get(url=index_url, params=data, headers=headers).json()
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
video_content = [audio_url, video_url]
return video_content
4、保存數據
def save(name, audio_url, video_url):
"""保存數據"""
audio_content = get_response(audio_url).content
video_content = get_response(video_url).content
with open(name + '.mp3', mode='wb') as a:
a.write(audio_content)
with open(name + '.mp4', mode='wb') as v:
v.write(video_content)
print(name, '保存成功')
5、合成視頻文章來源:http://www.zghlxwxcb.cn/news/detail-458310.html
def merge_data(video_name):
"""數據的合并"""
print('視頻合成開始:', video_name)
cmd = f"ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}output.mp4"
# print(cmd)
subprocess.run(cmd, shell=True)
print('視頻合成結束:', video_name)
好了,今天的分享就到這結束了,咱們下次見!文章來源地址http://www.zghlxwxcb.cn/news/detail-458310.html
到了這里,關于聽說小破站新上一批“高質量”的視頻,于是懷揣著“學習”的目的,我用Python將他們全部采集了下來的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!