还是很久之前写的爬虫,爬取某站的视频,因为某站的视频和音频是分开的,所以最后还需要合成在一起。
某站的舞蹈区大家都知道有很多的黑丝、白丝。嗯。。。都懂的,所以,下载下来被窝里偷偷看。
详细解释都在注释区
大家爬取的时候要注意延时一段时间,某站的访问量是很大。太快爬取会被封的。
import requests
from fake_useragent import UserAgent
import jsonpath
import re
import os
import time
# 请求头
headers = {"User-Agent": UserAgent().random,
"referer": "你自己的refer"}
# 创建存放视频的文件夹
if not os.path.exists("创建的文件夹名"):
os.mkdir("创建的文件夹名")
# 更改文件路径
os.chdir(r"你想要存放的路径")
# # 视频列表页url
for i in range(1, 3):
# 因审核的原因,接口不能放出来,大家可以自行找找接口,加上即可食用
# 获取up主的视频列表接口。mid=后面的一串数字更改为其他up主的,即可爬取其他up主的视频列表页
url = "up主的视频列表接口"
time.sleep(0.5)
response = requests.get(url, headers=headers).json()
# 解析网页
bvid = jsonpath.jsonpath(response, "$..bvid")
# 拼接网址
link = "某站的网址后加上 /video/ 即可"
detail_url = [link + i for i in bvid]
# 循环下载
for url_link in detail_url:
time.sleep(0.3)
res = requests.get(url_link, headers=headers).text
# 提取视频名
title = re.findall(r'class="video-title tit">(.*?)', res)
title = [re.sub("/", "", i) for i in title]
# 提示视频
str = re.findall('', res)[0]
vid = re.findall(r'"video":\[{"id":\d+,"baseUrl":"(.*?)"', str)
# 提取音频
aud = re.findall(r'"audio":\[{"id":\d+,"baseUrl":"(.*?)"', str)
# 下载视频音频
for n, v, a in zip(title, vid, aud):
vid_res = requests.get(url=v, headers=headers).content
aud_res = requests.get(url=a, headers=headers).content
print("Downloading", n)
with open(f'{n}.mp4', "wb") as f:
f.write(vid_res)
with open(f'{n}.mp3', "wb") as f:
f.write(aud_res)
# 因为该站是将音频和视频分开的,所以需要将下载视频音频进行合成为一个完成的视频。
os.system(f'ffmpeg.exe -i {n}.mp4 -i {n}.mp3 -c copy {n + " new"}.mp4')