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平台,感兴趣的小伙伴可以关注公众号【紫电的学习笔记】,回复【哔哩哔哩】获取小工具。

posted @ 2021-09-30 11:47  紫电_2021  阅读(430)  评论(0编辑  收藏  举报