当前位置: 首页 > article >正文

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合成。

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

一个代码示例

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


http://www.kler.cn/a/540504.html

相关文章:

  • 练习题(2.10)
  • 深入探究 Rust 测试:灵活控制测试的执行方式
  • 学习总结二十九
  • 防御综合实验
  • git命令行删除远程分支、删除远程提交日志
  • 【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)
  • 定制化APP:开启企业数字化转型新未来
  • 15 大 AWS 服务
  • 比亚迪发布智能化战略,天神之眼开创全民智驾
  • 工厂方法模式详解(Java)
  • Vue 和 React 的生态系统有哪些主要区别
  • Vue 和 React 在性能上的具体差异是什么
  • 服务器绑定 127.0.0.1 和 0.0.0.0 的区别
  • 大模型训练-gpu显卡训练环境搭建
  • ArcGIS Pro批量创建离线服务sd包
  • Kitchen Gadgets
  • Qt:项目文件解析
  • 海云安开发者智能助手(D10)全面接入DeepSeek,赋能开发者安全高效编码新范式
  • JavaScript特效大全:343个动态效果实例教程
  • 【信息系统项目管理师-案例真题】2017下半年案例分析答案和详解
  • 一键查看电脑各硬件详细信息 轻松查看电脑硬件参数
  • 03/29 使用 海康SDK 对接时使用的 MysqlUtils
  • 利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习
  • Selenium常用自动化函数
  • STM32 HAL库 ADC程序(C语言)
  • 剖析 C++ 模拟算法:数据结构、随机数生成与模型验证