Python+PyQt5制作一款视频数据下载小工具!
设计需求
通过输入关键字、页数并选择存储路径,下载相应的数据
这里就获取了你搜索的所有视频的标题、播放量、链接等信息,看看是不是很方便呀
开发环境
Python3
Pycharm
PyQt5
Qt Designer
requests
环境配置
安装Qt Designer
pip3 install PyQt5
pip3 install PyQt5-tools
配置开发工具
添加pyqt5designer 和pyuic5 工具到pycharm。
添加pyqt5designer 工具到pycharm 后,选中对应ui 文件,即可跳转到qt designer 软件,使用该软件设计UI 界面。
添加pyuic5 工具到pycharm 后,选中对应ui 文件,生成py 文件,通过py 文件即可查看定义的变量。
步骤1 选择“File > Settings”。
步骤2 添加pyqt5designer 工具。
选择“Tool > External Tools”,单击“+”,在弹出的对话框配置pyqt5designer 工具参数,单击“OK”。
添加pyqt5designer 工具参数说明
Name :工具名称,用户可以自定义,例如QtDesigner。 Program :填写Python 安装目录Scripts 文件夹下的pyqt5designer.exe 的路径。 Arguments :$FileDir$$FileName$ Working directory :$FileDir$
步骤3 添加pyuic5 工具。
单击“+”,在弹出的对话框配置pyuic5工具参数,单击“OK”。
添加pyuic5 工具参数说明
Name :工具名称,用户可以自定义,例如PyUI。 Program :填写Python 安装目录Scripts 文件夹下的pyuic5.exe 的路径。 Arguments:$FileName$ -o $FileNameWithoutExtension$.py Working directory:$FileDir$
步骤4 :使用QtDesigner工具设计界面。
选中对应的.ui文件,在右键菜单栏选择“External Tools >QtDesigner”,打开QtDesigner,此时设计界会弹出,说明工具已经安装成功。
QtDesigner 设计界面:
步骤5:将.ui 文件转换成.py 文件。
选中对应的.ui 文件,在右键菜单栏选择“External Tools >pyuic5”,将当前的.ui 文件转换成.py 文件。
界面设计
拖动对应控件,并修改控件属性
界面生成代码
利用PyUIC工具将界面转化为.py代码
界面与函数绑定
每个按钮会与函数绑定才能实现某些功能,即通过点击按钮触发函数实现你想要的的功能,这时候就要将按钮与函数绑定
我们这里涉及两个函数:
存储路径按钮,触发文件夹选择函数
#获取文件保存路径
def setBrowerPath(self):
# 获取路径
self.download_path = QFileDialog.getExistingDirectory(self)
# 将路径填充到文本框
self.textEdit_2.setText(self.download_path)
将存储路径按钮与setBrowerPath函数绑定
self.pushButton.clicked.connect(Form.setBrowerPath) #pushButton是存储路径按钮的名称
开始下载按钮,触发数据爬取与文件保存函数
# 爬起视频链接
def pushButton_click(self):
self.textEdit.setText("下载中......")
self.keyword = self.lineEdit.text() # 关键字
self.page = int(self.lineEdit_2.text()) # 页数
# result = pd.DataFrame()
for i in range(1, self.page + 1):
time.sleep(random.random() + 0.5)
params = (
('keyword', self.keyword),
('page', self.page),
)
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
html = requests.get('https://search.bilibili.com/video', headers=headers, params=params)
# html = requests.get(url.format(i), headers=headers)
soup = BeautifulSoup(html.text, 'html.parser')
items = soup.find('ul',class_='video-list clearfix')
for item in items.find_all('li'):
title = item.find(class_='headline clearfix').find('a').text
click = item.find(class_='so-icon watch-num').text.split()[0].strip('\n ').replace("万", "")
danmu = item.find(class_='so-icon hide').text.split()[0].strip('\n ')
date = item.find(class_='so-icon time').text.split()[0].strip('\n ')
up = item.find(class_='up-name').text.split()[0].strip('\n ')
href = re.findall('(www.*)', item.find('a')['href'])[0]
data = {'标题': title, '播放量(万)': click, '弹幕': danmu, '日期': date, 'UP主': up,'链接':href}
with open('{0}/{1}视频数据.csv'.format(self.download_path, self.keyword), 'a+', encoding='utf_8_sig',
newline='') as fp:
fieldnames = ['标题', '播放量(万)', '弹幕', '日期', 'UP主','链接']
writer = csv.DictWriter(fp, fieldnames=fieldnames)
writer.writerow(data)
将开始下载按钮与 pushButton_click函数绑定
self.pushButton_2.clicked.connect(Form.pushButton_click) #pushButton_2是开始下载按钮的名称
文本框中显示文字:
# 文本框显示文字
self.textEdit.append("第{0}页下载完成".format(i))
self.textEdit.append("保存路径:{}".format(self.download_path))
self.textEdit.append("文件名称:{}".format('{0}共{1}个视频数据.csv'.format(self.keyword, self.page * 20)))
函数调用
if name == 'main':
app = QApplication(sys.argv)
my_pyqt_form = MyPyQT_Form()
my_pyqt_form.show()
sys.exit(app.exec_())
软件设计的最终目的就是应用,我们可以打包生成exe文件,这样即使电脑上没有python环境也可以运行。
一行代码实现打包:
pyinstaller -F -w bilibili_download.py
此时就可以作为单独的工具使用了
工具已打包好了,适用于windows平台,感兴趣的小伙伴可以关注公众号【紫电的学习笔记】,回复【哔哩哔哩】获取小工具。