python视频爬虫

文章目录

爬虫的基本步骤

1.抓包分析,利用浏览器的开发者工具

2.发送请求

3.获取数据

4.解析数据

5.保存数据

一些工具

  1. requests, 用于发送请求,可以通过get,post等方式。通常需要加标头headers将Cookies和User-Agent,referer带上。
  2. re, 正则表达式,用于查找目标字符串,解析网页。
  3. urllib.parse.unquote, 用于解码 URL 编码的字符串。URL 编码(也称为百分号编码)是将某些字符转换为 % 后跟两位十六进制数的形式,以便在 URL 中安全传输。
  4. json.loads(), 将json数据格式转化为字典。
  5. pprint.pprint(), 用于"美化打印"(pretty-print)复杂的数据结构,如字典、列表等。它可以使输出更易于阅读,特别是在处理嵌套结构时。
  6. 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合成。

爬完一个视频后应当停顿几秒,防止服务器发爬机制。

一个代码示例

python 复制代码
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

相关推荐
元亓亓亓11 分钟前
java后端开发day14--之前练习的总结和思考
java·开发语言
AAA顶置摸鱼24 分钟前
机器学习·线性回归(三)线性回归预测实战
python·机器学习·线性回归
Pandaconda32 分钟前
【Golang 面试题】每日 3 题(五十)
开发语言·经验分享·笔记·后端·面试·golang·go
hello php39 分钟前
PHP处理大文件上传
android·开发语言·php
F-2H1 小时前
数据结构:队列
linux·c语言·开发语言·数据结构·算法·链表
琳琳简单点2 小时前
python卷积神经网络人脸识别示例实现详解
开发语言·人工智能·python·神经网络·cnn
小馒头学python2 小时前
【算法学习】蓝耘云智算|利用DeepSeek R1模型提升数据结构与算法学习效率
服务器·数据结构·python·学习·算法
m0_748241702 小时前
JAVA集成Jasypt进行加密、解密(SpringBoot)
java·开发语言·spring boot
骇客野人3 小时前
【人工智能】通过python连接mysql数据库
数据库·python·mysql
==PP3 小时前
【pyvisa】深度解析(2)
python·pyvisa