Python爬取视频并下载

Python爬取视频做“ 可视化 ”
1、下载爬取到的视频
2、完整代码
3、每行代码附加注释

首先,进行爬取视频并下载之前,请确保已经安装了 Python 以及爬虫、多媒体处理相关的库,比如 requests、beautifulsoup4 和 ffmpeg。

import requests
from bs4 import BeautifulSoup
import ffmpeg

# 视频 URL,这里以 YouTube 为例
video_url = 'https://www.youtube.com/watch?v=XXXXXXXXXXX'

# 使用 requests 库发起 GET 请求获取视频页面
res = requests.get(video_url)

# 使用 beautifulsoup4 库解析视频页面
soup = BeautifulSoup(res.text, 'html.parser')

# 提取视频标题
title = soup.title.string

# 提取视频下载链接
download_link = soup.find('a', {'aria-label': 'Download'})['href']

# 使用 requests 库下载视频
res = requests.get(download_link)

# 使用 ffmpeg 库将下载的视频保存到本地
with open('video.mp4', 'wb') as f:
    f.write(res.content)

使用 Python 和 OpenCV 库可视化视频的信息:

import cv2

# 读取视频
video = cv2.VideoCapture('video.mp4')

# 获取视频信息
fps = video.get(cv2.CAP_PROP_FPS)
width = video.get(cv2.CAP_PROP_FRAME_WIDTH)
height = video.get(cv2.CAP_PROP_FRAME_HEIGHT)

# 打印视频信息
print(f'FPS: {fps}')
print(f'Resolution: {width}x{height}')

# 释放视频
video.release()

如果要提取视频的帧并保存到本地参考以下代码:

import cv2

# 读取视频
video = cv2.VideoCapture('video.mp4')

# 获取视频帧率
fps = video.get(cv2.CAP_PROP_FPS)

# 提取并保存视频帧
count = 0
while True:
    success, frame = video.read()
    if not success:
        break
    cv2.imwrite(f'frame_{count}.jpg', frame)
    count += 1

# 释放视频
video.release()

ps:提取视频帧的速度可能较慢,因此可能需要花费较长的时间才能提取完整个视频的所有帧

步骤一:首先请求302重定向的地址

如我们复制的抖音视频分享链接都是下面这样的

4.15 usE:/ 化妆简直邪术 https://v.douyin.com/8NTarjq/ 复zhi佌链接,答汧Dou音搜索,直接观kan视频!

我们需要用requests请求这段文本中的链接 https://v.douyin.com/8NTarjq/

html = requests.get(t[0], allow_redirects=False)
url2=html.headers['Location']# 获取跳转地址

因为链接会进行302重定向跳转,所以需要在请求的时候加个allow_redirects=False参数,它的返回值是下面这样的

https://www.iesdouyin.com/share/video/6997004782640598310/?region=CN&mid=%E5%90%8E%E9%9D%A2%E8%BF%98%E6%9C%89%E4%B8%80%E5%A0%86%E5%8F%82%E6%95%B0%EF%BC%8C%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%B8%8D%E7%AE%A1%E5%AE%83
这条链接是该视频的网页地址,我们需要的就是video/()/?region中间的这串数字6997004782640598310

将这串数字拼接在抖音官方的json接口上

ur=f'https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={item_ids[0]}%27

其中item_ids[0]就等于我们获取的6997004782640598310,也就是网页视频id,拼接后连接如下

https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=6997004782640598310

步骤二:请求json链接

上面我们获取拼接了视频的json链接,大家写代码的时候可以把链接复制到浏览器打开查看具体内容

部分内容如图
我们还是用request请求链接,通过浏览器看json内容,获取我们需要的相关值

html2 = requests.get(ur,headers=headers) #请求json链接
title=html2.json()['item_list'][0]['desc'] #抖音视频的文案内容
video_id=html2.json()['item_list'][0]['video']['play_addr']['uri'] #视频的uri,也就是video_id
video_url=f'https://aweme.snssdk.com/aweme/v1/play/?video_id={video_id}&ratio=720p&line=0%27

步骤三:对链接进行拼接

因为所有视频的地址只有video_id不一样,所以我们主要的就是获取json返回数据中的video_id,然后和

https://aweme.snssdk.com/aweme/v1/play/?video_id=
拼接在一起,就是抖音无水印视频的地址了,当我们访问的时候,它还会重定向跳转到视频的真实地址,我们访问这段链接就能下载到无水印视频。

https://aweme.snssdk.com/aweme/v1/play/?video_id=v0d00fg10000c4d5klrc77u1kmdccc6g
例:上面就是我获取这个例子的无水印视频,大家可复制到浏览器访问看是否是无水印的,结果如下图

可以看出,视频是无水印的并且可以下载,而且我试了一下,成功下载到本地!

附上我做好的抖音无水印视频解析接口供大家使用,接口地址:

https://www.hmily.vip/api/dy/?url=

使用方法:
在接口地址后面加上你要下载的抖音视频链接就行了,返回的是json类型数据,包含无水印视频下载链接,mp3背景音乐下载链接和视频封面等等信息。

提供参考示例【用python爬取视频并下载,超详细】,链接:https://blog.csdn.net/qq_65898266/article/details/124749976

可以借鉴下
https://www.jb51.net/article/201640.htm

最简单的结构:

import requests
import urllib.request

# 爬取视频地址的网址
video_url_website = "https://example.com"

# 发送 HTTP GET 请求
response = requests.get(video_url_website)

# 解析 HTML 页面
html = response.text

# 使用正则表达式匹配视频地址
import re

pattern = r'https://[\w./]+\.mp4'
video_urls = re.findall(pattern, html)

# 下载视频
for video_url in video_urls:
  urllib.request.urlretrieve(video_url, "video.mp4")

如果视频比较长,是ts视频流,则可以采用多线程或携程获取ts视频片段,最后合并。
可以学习哔哩哔哩这个课程:https://b23.tv/R1XzYA7

爬取的话~是哪个网站啊

https://blog.csdn.net/weixin_45951067/article/details/120856122可以参考下

参考一下https://zhuanlan.zhihu.com/p/344230801

很详细,参考下:
【用python爬视频,超详细,让下载成为可能(某站)】https://mbd.baidu.com/ma/s/ZYAsr72N

安装you-get
pip3 install you-get

e.g.下载一段美拍视频
输入如下命令:you-get http://www.meipai.com/media/454570774

如果要在python代码里面调用,那就import os,通过os调用命令行执行you-get命令,一行


import requests
from bs4 import BeautifulSoup
import re
import os
 
# 创建保存文件夹
if not os.path.exists('video'):
    os.mkdir('video')
 
# 定义请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
 
# 获取视频列表页面
url = 'https://www.pearvideo.com/category_1'
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
 
# 获取每个视频的 url
video_list = soup.find_all('li', class_='pop')
for video in video_list:
    video_url = 'http://www.pearvideo.com/' + video.find('a').get('href')
    video_res = requests.get(video_url, headers=headers)
    video_soup = BeautifulSoup(video_res.text, 'html.parser')
 
    # 获取视频的标题
    video_title = video_soup.find('h1').text
 
    # 获取视频的下载地址
    video_src = re.findall(r'(http.*?\.mp4)', video_res.text)[0]
    video_res = requests.get(video_src, headers=headers)
 
    # 保存视频
    with open('video/' + video_title + '.mp4', 'wb') as f:
        f.write(video_res.content)

步骤:

1,导入必要的库:urllib, re
2,找到目标网站并获取网页源码
3,使用正则表达式提取视频链接,
4,使用urllib的urlretrieve函数下载视频
完整代码如下:

import urllib
import re

目标网站地址
url = "https://www.example.com/video/123%22

获取网页源码
html = urllib.request.urlopen(url).read()

使用正则表达式提取视频链接
pattern = re.compile(r'https://www.example.com/video/123/[/w/d]+.mp4')
video_url = pattern.findall(html)

下载视频
urllib.request.urlretrieve(video_url[0], "video.mp4")