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")