python视频爬虫
文章目录
- 爬虫的基本步骤
- 一些工具
- 模拟浏览器并监听文件
- 视频爬取易错点
- 一个代码示例
- 参考
爬虫的基本步骤
1.抓包分析,利用浏览器的开发者工具
2.发送请求
3.获取数据
4.解析数据
5.保存数据
一些工具
- requests, 用于发送请求,可以通过get,post等方式。通常需要加标头headers将Cookies和User-Agent,referer带上。
- re, 正则表达式,用于查找目标字符串,解析网页。
- urllib.parse.unquote, 用于解码 URL 编码的字符串。URL 编码(也称为百分号编码)是将某些字符转换为 % 后跟两位十六进制数的形式,以便在 URL 中安全传输。
- json.loads(), 将json数据格式转化为字典。
- pprint.pprint(), 用于“美化打印”(pretty-print)复杂的数据结构,如字典、列表等。它可以使输出更易于阅读,特别是在处理嵌套结构时。
- DrissionPage.ChromiumPage,用于模拟浏览器。
模拟浏览器并监听文件
dp=ChromiumPage()
dp.listen.start(‘文件名称’)
dp.get(url)
resp=dp.listen.wait()
resp_dict=resp.response.body
视频爬取易错点
短视频一般是mp4的文件。长视频往往是m3u8流媒体,需要爬取多个ts文件。但是,长视频也可能是音频(audio)+视频(video)的形式传输,并利用ffmpeg合成。
爬完一个视频后应当停顿几秒,防止服务器发爬机制。
一个代码示例
from DrissionPage import ChromiumPage
import requests
import json
import re
from tqdm import tqdm
# 打开浏览器
dp = ChromiumPage()
# 打开网址
url = input("请输入视频链接:")
dp.get(url)
# 监听数据包
dp.listen.start('proxyhttp')
# 等待数据包加载
resp = dp.listen.wait()
# 获取相应数据
response = resp.response.body
# print(response)
json_data = response['vinfo']
# print(type(json_data))
# 将json字符串转换成json字典
info_json = json.loads(json_data)
# print(type(info_json))
# 取出视频切片链接包的地址
m3u8_url = info_json['vl']['vi'][0]['ul']['ui'][-1]['url']
# print(m3u8_url)
headers = {
# 用户信息
'cookie':
'填写自己的用户信息',
'referer':
'https://v.qq.com/',
# 防盗链
'user-agent':
'填写自己的设备信息'
# 设备信息
}
# 请求获取所有的视频ts片段
m3u8 = requests.get(url=m3u8_url, headers=headers).text
# print(m3u8)
ts_list = re.findall(',\n(.*?)\n#', m3u8)
ts_name = '/'.join(m3u8_url.split('/')[:-1]) + '/'
# print(ts_name)
# print(ts_list)
for ts in tqdm(ts_list):
# 拼接完整的ts视频链接
ts_url = ts_name + ts
# 获取视频片段内容
ts_content = requests.get(url=ts_url, headers=headers).content
#以追加的形式,写入2进制数据
with open('保存位置.mp4', mode='ab') as f:
f.write(ts_content)
参考
https://blog.csdn.net/2201_75495538/article/details/143438422