1.写在前面1.关于音视频合并因为小站的音视频图像是分开的(fan剧也一样),正常爬下来也是这样。额,这样的截图,小姐姐的脸都变形了……还是个小美女,算了。所以我们需要额外安装一个软件FFmpeg来合成视频,然后配置环境变量。2.关于exe文件的打包,我是这样打包的。正常打包后,没有我的图标。图标可以在打包时一起更改。2.合成过程结果。该工艺合成成功。这个封面真的不好看自己试的时候改一下...3.代码实现先导入模块importrequests#数据请求模块第三方模块pipinstallrequestsimportre#内置正则表达式模块不需要安装importpprint#formatoutputmoduleimportjson#serializeanddeserializeimportsubprocessimportossendrequestandgetdatafunction#单引号/双引号/三引号括起来的内容是字符串数据。#三引号也可以作为注释,多行代码注释。defget_response(html_url):""":paramhtml_url:请求的url地址:return:返回请求服务器返回的响应数据"""#发送请求前,需要伪装headers请求头#user-agentbrowserbasicidentificationuseragent基本上伪装成一种反爬虫方式#当出现403时,添加一个反盗链referer,告诉服务器我们发送请求的url地址是从哪里来的。headers={'referer':'https://search.bilibili.com/','user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/96.0.4664.45Safari/537.36'}response=requests.get(url=html_url,headers=headers)#请求码#对象response响应对象200状态码表示请求成功#404>>>您拨打的电话号码为空>>>URLerror#403>>>您拨打的电话不在服务区内>>>您没有访问权限#100-500300可以returnresponse获取视频标题/音频url地址/视频画面url地址defget_video_info(html_url):""":paramhtml_url:视频详情页:return:视频标题/音频url地址/视频画面url地址"""response=get_response(html_url=html_url)#response.text获取响应体的文本数据#print(response.text)获取html字符串数据#只要能看到数据就可以批量下载#解析数据提取视频标题re正则表达式css选择器xpath(解析方法)bs4parsellxml(解析模块)jsonpath主要提取json数据#['【4K美女】本视频禁止曹贼进入~~']正则表达式提取的数据内容返回为列表数据类型[0]列表索引值#通过re正则表达式中的findall方法提取数据内容''我要提取数据#需要的内容用括号括起来*?可以匹配任意字符(换行符除外\n)从response.text中搜索Datatitle=re.findall('',response.text)[0].replace('','')#标题title=re.sub(r'[/\*:"?<>|]','',title)html_data=re.findall('',response.text)[0]#播放信息的#html_data是什么数据类型#为了更方便的提取数据,字符串数据可以转换成字典数据类型#print(type(response.text))#print(title)#print(html_data)#pprint.pprint(html_data)#print(type(html_data))json_data=json.loads(html_data)#根据冒号左边的内容,提取冒号右边的内容键值对的值#注册的账号电话号码或身份证号码中数字过多,所以你不能只填写audio_url=json_data['data']['dash']['audio'][0]['baseUrl']video_url=json_data['data']['dash']['video'][0]['baseUrl']video_info=[title,audio_url,video_url]#pprint.pprint(json_data)#print(audio_url)#print(video_url)返回video_info保存数据函数defsave(title,audio_url,video_url):""":paramtitle:videotitle:paramaudio_url:audiourl:paramvideo_url:videoscreenurl:return:"""#保存音视频数据获取二进制数据内容#403无访问权限audio_content=get_response(html_url=audio_url).contentvideo_content=get_response(html_url=video_url).content#英文符号withopen(title+'.mp3',mode='wb')asf:f.write(audio_content)withopen(title+'.mp4',mode='wb')asf:f.write(video_content)print(title,'保存成功~~~')数据合并defmerge_data(video_name):print('视频合成开始:',video_name)cmd=f"ffmpeg-i{video_name}.mp4-i{video_name}.mp3-c:vcopy-c:aaac-strictexperimental{video_name}output.mp4"#print(cmd)子进程。run(cmd,shell=True)print('Videocompositionended:',video_name)os.remove(f'{video_name}.mp4')os.remove(f'{video_name}.mp3')如果操作不是保存了,但是如果没有下载结果,说明你的环境变量没有设置好,我们只是把合并后程序的文件路径放上去cmd=f"C:\\ffmpeg\\bin\\ffmpeg-i获取某个up主的所有视频bv号defget_video_id(html_url):""":paramhtml_url:视频信息包:return:"""json_data=get_response(html_url).json()['data']['list']['vlist']bv_id_list=[i['bvid']foriinjson_data]returnbv_id_listmainfunctiondefmain(html_url):""":parambv_id:bvnumber:return:"""bv_id_list=get_video_id(html_url)forindexinbv_id_list:url=f'https://www.bilibili.com/video/{index}'video_info=get_video_info(url)#[title,audio_url,video_url]save(video_info[0],video_info[1],video_info[2])merge_data(video_info[0])if__name__=='__main__':forpageinrange(1,5):复制代码url=f'https://api.bilibili.com/x/space/arc/search?mid=81595107&ps=30&tid=0&pn={page}&keyword=&order=pubdate&jsonp=jsonp'main(url)兄弟们别着急,不忍看多了兄弟们,你们废了吗?觉得还可以的话,记得复盘哦~