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

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.dtcms.com/a/13731.html

相关文章:

  • 2025 年 2 月 TIOBE 指数
  • day09_实时类标签/指标
  • 使用Cocos Creator制作“打砖块”小游戏:从零开始的详细教程
  • Aitken 逐次线性插值
  • SQLite 约束
  • 算法学习笔记之贪心算法
  • ASP.NET Core的贫血模型与充血模型
  • PortSwigger——WebSockets vulnerabilities
  • 稀土紫外屏蔽剂:科技护航,守护您的健康与美丽
  • Docker拉不下来镜像问题解决法案
  • SpringMVC请求执行流程源码解析
  • 和鲸科技上线 DeepSeek 系列模型服务,助力数智企业 AI 业务创新!
  • [开源]MaxKb+Ollama 构建RAG私有化知识库
  • 【Linux】操作系统的理解/进程/环境变量/虚拟地址空间
  • android的第一个app项目(java版)
  • 微信小程序网络请求封装
  • DeepSeek从入门到精通:全面掌握AI大模型的核心能力
  • 【AI学习】关于 DeepSeek-R1的几个流程图
  • JVM——垃圾回收算法
  • STM32 RCC功能说明 复位和时钟控制RCC
  • 【Uniapp】关于实现下拉刷新的三种方式
  • R18 XR L1 enhancement
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 【大语言模型】最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • 【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘
  • 【清晰教程】本地部署DeepSeek-r1模型
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统
  • 常用的python库-安装与使用
  • CTF-WEB: 利用Web消息造成DOM XSS
  • DeepSeek接口联调(postman版)