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

相关推荐
勤奋的知更鸟3 分钟前
LLaMA-Factory和python版本的兼容性问题解决
开发语言·python·llama-factory
CIb0la6 分钟前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
1candobetter15 分钟前
JAVA后端开发——多租户
java·开发语言
Takina~23 分钟前
python打卡day48
pytorch·python·深度学习
freyazzr37 分钟前
C++八股 | Day3 | 智能指针 / 内存管理 / 内存分区 / 内存对齐
开发语言·c++
序属秋秋秋43 分钟前
《C++初阶之入门基础》【普通引用 + 常量引用 + 内联函数 + nullptr】
开发语言·c++·笔记
星辰离彬44 分钟前
Java 高级泛型实战:8 个场景化编程技巧
java·开发语言·后端·程序人生
纨妙44 分钟前
python打卡day47
开发语言·python
ghost1431 小时前
C#学习第29天:表达式树(Expression Trees)
开发语言·c#
Auscy1 小时前
JavaScript 数组学习总结
开发语言·javascript·学习