網站首頁 編程語言 正文
模塊使用
requests >>> pip install requests (數據請求 第三方模塊)
re # 正則表達式 去匹配提取數據
json
開發環境
Python 3.8 解釋器
Pycharm 2021.2 版本 建議
win + R 輸入cmd 輸入安裝命令 pip install 模塊名 如果出現爆紅 可能是因為 網絡連接超時 切換國內鏡像源
案例實現
1.明確需求
采集內容, 先分析一個視頻是從哪里獲取
通過開發者工具進行抓包分析, 分析視頻數據可以從哪里獲取內容 格式 m3u8視頻內容
當我們網站視頻格式 是m3u8的時候, 有一個專門存放所有ts視頻片段的文件
2.代碼實現步驟
- 發送請求
- 獲取數據
- 解析數據
- 保存數據
1. 發送請求, 對于視頻播放頁面url地址發送請求
2. 獲取數據, 獲取服務器返回response響應數據
3. 解析數據, 提取我們想要的數據內容 視頻標題 以及 m3u8 鏈接
4. 發送請求, 對于 m3u8 鏈接 發送請求
5. 獲取數據, 獲取服務器返回response響應數據
6. 解析數據, 提取所有ts文件url [視頻片段]
7. 保存數據, 把所有視頻保存下來, 然后合成為一個整體視頻內容
實現代碼
import requests # 數據請求模塊 pip install requests 在cmd里面 輸入命令
import re # 導入正則表達式模塊 內置模塊
import json
import pprint # 格式化輸出模塊
for page in range(1, 17):
print(f'--------------------正在采集第{page}頁的數據內容--------------------')
list_url = 'https://www.acfun.cn/u/45321802'
# 批量 ctrl + R 選中目標
data = {
'quickViewId': 'ac-space-video-list',
'reqID': page + 1,
'ajaxpipe': '1',
'type': 'video',
'order': 'newest',
'page': page,
'pageSize': '20',
't': '1649944573765',
}
headers = {
# 'cookies': '你的cookie',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
}
# get請求 有一個params參數
# post請求 data 參數
response = requests.get(url=list_url, params=data, headers=headers)
# print(response.text)
id_list = re.findall('a href=.*?ac(.*?)"', response.text)
for index in id_list:
video_id = index.replace('\\', '')
"""
1. 發送請求, 對于視頻播放頁面url地址發送請求
用python代碼去模擬瀏覽器 對于 url地址發送請求
video
"""
url = f'https://www.acfun.cn/v/ac{video_id}' # 確定請求url地址
# 請求頭 用偽裝python代碼, 為了被服務器識別出來 是爬蟲程序 一種簡單反反爬手段 當你加ua 得到數據的時候, 可能要cookie
# 需要登陸才能獲得數據的, 需要加cookie 用戶信息, 常用于檢測是否登陸賬號
headers = {
# 'cookies': '你的cookie',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
}
# 通過requests模塊里面get請求方式, 對于url地址發送請求, 并且攜帶上headers請求頭偽裝, 最后用response自定義變量接收返回數據
response = requests.get(url=url, headers=headers)
# 2. 獲取數據
# print(response.text)
# 3. 解析數據 通過re模塊里面findall的方法 在response.text里面去找尋 標題數據 re.S 匹配換行
# 正則表達式提取出來的數據返回都是列表數據類型 實現過程不重要, 方式方法很多, 你喜歡用哪個都可以 只要可以取到數據都OK
title = re.findall('<title >(.*?) - AcFun彈幕視頻網 - 認真你就輸啦 \(\?ω\?\)ノ- \( ゜- ゜\)つロ</title>', response.text)[0]
video_info = re.findall('window.pageInfo = window.videoInfo = (.*?);', response.text)[0]
# print(video_info) # 字符串轉成字典 怎么轉 最穩妥查看數據類型 直接用 type() 這個函數去查看
json_data = json.loads(video_info)
# pprint.pprint(json_data)
# 字典取值 根據冒號左邊的內容(鍵) 提取冒號右邊的內容(值)
m3u8_url = \
json.loads(json_data['currentVideoInfo']['ksPlayJson'])['adaptationSet'][0]['representation'][0]['backupUrl'][0]
# print(title)
# print(m3u8_url)
# 通過requests模塊里面get請求方式, 對于m3u8_url地址發送請求, 并且攜帶上headers請求頭偽裝, 獲取響應體文本數據, 用m3u8_data自定義變量接收數據
m3u8_data = requests.get(url=m3u8_url, headers=headers).text
# split() 字符串分割
m3u8_data = re.sub('#E.*', '', m3u8_data).split()
# print(m3u8_data)
for ts in m3u8_data:
ts_url = 'https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/' + ts
ts_content = requests.get(url=ts_url, headers=headers).content
# ab 是什么意思 a追加保存, b 二進制數據 ab 以二進制數據追加保存
with open('video\\' + title + '.mp4', mode='ab') as f:
f.write(ts_content)
print('視頻保存完成: ', title)
視頻教程
原文鏈接:https://blog.csdn.net/python56123/article/details/124197573
相關推薦
- 2023-05-21 一文詳解無痕埋點在Android中的實現_Android
- 2022-08-10 如何利用SQL語句創建數據庫詳解_數據庫其它
- 2023-07-24 前端終止請求的三種方式(ajax、axios)
- 2022-10-18 AJAX淺析數據交換的實現_AJAX相關
- 2022-06-14 colab中修改python版本的全過程_python
- 2022-11-26 詳解Python中的with語句和上下文管理器_python
- 2022-05-01 python中NumPy的安裝與基本操作_python
- 2022-12-26 flouting?ui定位組件完美替代ant?deisgn使用詳解_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支