这几个错误大致,测试了多次知道是路径部分的问题,找了一下午找不到出在哪人都麻了
麻烦各位boss看看
E:\b站视频\【2分钟辨析:bildsam,: Invalid argument
E:\b站视频\老天爷你觉得这样对一个7岁的孩子好吗?原本是应该无忧无虑的小孩子,你却让他背负这么多!: Invalid argument
'quot' ???ⲿ???Ҳ???ǿе???ij??? # 乱码了???
E:\b站视频\中单T3: No such file or directory
# 需要安装ffmpeg
class bilibili(object):
def __init__(self,word,page):
# 爬取数据网页源码
self.headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
# 'user-agent': 'Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 550) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/14.14263',
'referer': 'https://www.bilibili.com/'
}
# print(self.headers)
self.word = urllib.parse.quote(word)
self.page = page
def search_video_list(self):
url = f'https://api.bilibili.com/x/web-interface/wbi/search/type?__refresh__=true&_extra=&context=&page={self.page}&page_size=42&from_source=&from_spmid=333.337&platform=pc&highlight=1&single_column=0&keyword={self.word}&qv_id=8FmF8ni6SYF6I8OmsYUC6uSyVO8UPKPe&ad_resource=5654&source_tag=3&category_id=&search_type=video&dynamic_offset=0&w_rid=693626d143437a03f4a6e2dcba46e6ec&wts=1673415050'
res_data = requests.get(url,headers=self.headers)
time.sleep(1)
data = res_data.json()['data']['result']
video_url_list = []
video_name_list = []
for index in range(len(data)):
name = data[index]['title']
arcul = data[index]['arcurl']
name = name.replace('', '').replace('', '')
# v = \\/:*?/"<>|
video_name_list.append(name)
video_url_list.append(arcul)
return video_name_list,video_url_list
# 得到视频
def get_video_download(self):
print('-------------------------------请稍等------------------------------------------')
video_dir_path = 'E:\\b站视频'
vido_name_list, video_url_list = self.search_video_list()
for index,video_url in enumerate(video_url_list):
# print(video_url)
video_name = vido_name_list[index]
video_name = re.sub(r'[\\\/\:\*\?\<\>\|]','_',video_name)
# print(video_name)
res_video = requests.get(video_url,headers=self.headers).text
time.sleep(0.5)
# print(res_video)
info = re.findall('',res_video)[0]
info = json.loads(info)
# 3. 列表为0爬取高清视频的url
aurl = info['data']['dash']['audio'][0]['baseUrl']
vurl = info['data']['dash']['video'][0]['baseUrl']
# print(aurl)
if os.path.split(video_dir_path)[1] not in os.listdir('E:\\'):
os.makedirs("E:\\b站视频")
if video_name+'output.mp4' not in os.listdir('E:/b站视频/'):
time.sleep(1)
res_video_download = requests.get(vurl,headers=self.headers,stream=True)
res_audio_download = requests.get(aurl,headers=self.headers,stream=True)
filename = os.path.join(video_dir_path,video_name)
print(filename)
chunk_size = 1024
pbar_video = tqdm(total=int(res_video_download.headers.get('Content-Length')),position=0)
pbar_audio = tqdm(total=int(res_audio_download.headers.get('Content-Length')),position=0)
print('-------------------------------视频正在下载------------------------------------------')
with open(f'{filename}.mp4',mode='wb') as f1:
for chunk in res_video_download.iter_content(chunk_size=chunk_size):
f1.write(chunk)
pbar_video.update(chunk_size)
pbar_video.set_description('video下载完毕!!!')
pbar_video.close()
with open(f'{filename}.mp3',mode='wb') as f2:
for chunk in res_audio_download.iter_content(chunk_size=chunk_size):
f2.write(chunk)
pbar_audio.update(chunk_size)
pbar_audio.set_description('audio下载完毕!!!')
pbar_audio.close()
# f.flush()
self.combine_video()
else:
print('已下载,跳过!!!')
# 合并视频
def combine_video(self):
list = []
vlist = []
alist = []
# 分类器 mp3/4 相同时合并
for v_name in os.listdir('E:\\b站视频'):
v = re.findall('.*.mp4', v_name)
a = re.findall('.*.mp3', v_name)
if v != list:
vlist.append(v[0])
if a != list:
alist.append(a[0])
for i in vlist:
for j in alist:
if i[::-1].split('.',1)[1][::-1] == j[::-1].split('.',1)[1][::-1]:
name = i[::-1].split('.',1)[1][::-1]
COMMAND = f'ffmpeg -i E:\\b站视频\\{name}.mp4 -i E:\\b站视频\\{name}.mp3 -c:v copy -c:a aac -strict experimental E:\\b站视频\\{name}output.mp4 -n'
subprocess.run(COMMAND, shell=True)
time.sleep(1)
os.remove('E:\\b站视频\\'+name + '.mp4')
os.remove('E:\\b站视频\\'+name + '.mp3')
if __name__ == '__main__':
print('温馨提示:视频下载慢时,请重新连接')
# print('视频下载结束!!!请按q-->')
def main():
try:
word, page = input("---请输入你要爬取哔站的搜索内容和页数(以空格分割):").split(' ')
page = int(page)
b = bilibili(word, page)
b.get_video_download()
except ValueError as e:
print('输入格式错误!!!请重新输入-->')
main()
main()
该回答引用ChatGPT,如果有帮助到您请点个采纳
这个错误很可能是由于文件名中包含非法字符导致的。在Windows系统中,文件名不能包含如下字符:
\ / : * ? " < > |
建议更改文件名以去掉这些字符,例如:把 "【2分钟辨析:bildsam," 改成 "bildsam_2min"。
对于乱码的情况,请检查文件名是否正确编码,并使用正确编码的方式保存
在ffmpeg的命令那里把路径加上引号,不然对参数的解析会出问题:
COMMAND = f'ffmpeg -i "E:\\b站视频\\{name}.mp4" -i "E:\\b站视频\\{name}.mp3" -c:v copy -c:a aac -strict experimental "E:\\b站视频\\{name}output.mp4" -n'