教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件

一、写在前面 1、关于音频视频合并 因为小破站的音频和视频画面是分开的 (番剧也是一样的),正常爬下来是这样。
【教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件】教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

额,这么截图,小姐姐的脸都变形了…
本来还是挺好看的一姑娘,算了不管她。
所以我们需要额外的去安装一个软件FFmpeg用来合成视频,然后配置环境变量就可以了。
2、关于打包exe文件 这是我打包好的样子
教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

正常打包后是没有我这个图标的,图标在打包的时候可以一起改了。
二、过程结果 合成过程
教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

合成成功
教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

这个封面着实不给力,大家自己去试的时候,换一个吧…
三、代码实现 首先导入模块

import requests# 数据请求模块第三方模块 pip install requests import re# 正则表达式 内置模块 不需要安装 import pprint# 格式化输出模块 import json# 序列化和反序列化 import subprocess import os

发送请求 以及获取数据函数
#单引号/双引号/三引号括起来的内容是字符串数据。 #三引号也可以作为注释,多行代码注释。 def get_response(html_url): """ :param html_url:请求的url地址 :return: 返回请求服务器返回的响应数据 """ # 在发送请求之前, 需要进行伪装 headers 请求头 # user-agent 浏览器基本标识 用户代理基本伪装 反反爬的手段 # 出现 403 加防盗链 referer告诉服务器, 我们发送请求的url地址 是从哪里跳转过来的 headers = { 'referer': 'https://search.bilibili.com/', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' } response = requests.get(url=html_url, headers=headers)# 请求代码 # 对象response响应对象200 状态码 表示请求成功 # 404 >>> 你所拨打的电话是空号 >>> 网址出错 # 403 >>> 你所拨打的电话不在服务区 >>> 你没有访问权限 # 100-500 300还行 return response

获取视频标题 / 音频 url地址 / 视频画面url地址
def get_video_info(html_url): """ :param html_url:视频的详情页 :return: 视频标题 / 音频 url地址 / 视频画面url地址 """ response = get_response(html_url=html_url) # response.text 获取响应体的文本数据 # print(response.text) 获取html字符串数据 # 只要你可以看到数据 就可以下载 进行批量下载 # 解析数据 提取视频标题 re正则表达式 css选择器 xpath(解析方式)bs4 parsel lxml (解析模块) jsonpath 主要提取json数据 # ['【4K美女】此视频禁止曹贼入内~~'] 正则表达式提取的数据内容 返回都是列表数据类型 [0] 列表 索引取值 # 通过re正则表达式里面findall 方法 提取数据内容'' 我想要的提取数据 # 想要的内容用括号括起来 .*? 可以匹配任意字符(除了换行符以外\n)从 response.text 里面查找数据 title = re.findall('', response.text)[0].replace(' ', '')# 标题 title = re.sub(r'[/\*:"?<>|]', '', title) html_data = https://www.it610.com/article/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 = https://www.it610.com/article/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) return video_info

保存数据函数
def save(title, audio_url, video_url): """ :param title: 视频标题 :param audio_url:音频url :param video_url:视频画面url :return: """ # 保存音频 视频数据 获取二进制数据内容 # 403 没有访问的权限 audio_content = get_response(html_url=audio_url).content video_content = get_response(html_url=video_url).content # 英文符号 with open(title + '.mp3', mode='wb') as f: f.write(audio_content) with open(title + '.mp4', mode='wb') as f: f.write(video_content) print(title, '保存成功~~~')

数据的合并
def merge_data(video_name): print('视频合成开始:', video_name) cmd = f"ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental {video_name}output.mp4" # print(cmd) subprocess.run(cmd, shell=True) print('视频合成结束:', video_name) os.remove(f'{video_name}.mp4') os.remove(f'{video_name}.mp3')

如果运行没保存,但是没有下载结果的话,就是你的环境变量没设置好,我们把合并程序的文件路径放上去就行了。
cmd = f"C:\\ffmpeg\\bin\\ffmpeg -i

获取某一个up主所有视频bv号
def get_video_id(html_url): """ :param html_url:视频信息数据包 :return: """ json_data = https://www.it610.com/article/get_response(html_url).json()['data']['list']['vlist'] bv_id_list = [i['bvid'] for i in json_data] return bv_id_list

主函数
def main(html_url): """ :param bv_id: bv号 :return: """ bv_id_list = get_video_id(html_url) for indexin bv_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__': for page in range(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)

兄弟们悠着点,看多了遭不住。
教兄弟们爬取B站上攒劲的节目,并打包成可以直接运行的exe文件
文章图片

兄弟们,学废了吗?
觉得还行的话,记得三连哈~

    推荐阅读