基于python实现的百度音乐下载器python pyqt改进版(附代码)

 更新时间:2019年08月05日 10:05:05   作者:风的姿态  
这篇文章主要介绍了基于python实现的百度音乐下载器python pyqt改进版(附代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

之前写过一个用python实现的百度新歌榜、热歌榜下载器的文章,实现了百度新歌、热门歌曲的爬取与下载。但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒。而且用Pyqt做的界面,在下载的过程中进行窗口操作,会出现UI阻塞的现象。

前两天有时间调整了一下,做了几方面的改进:

1.修改了UI界面阻塞的问题,下载的过程中可以进行其它的UI操作;

2.爬虫程序采用一个主线程,8个子线程的方式快速爬取,网络状况一致的情况下,将扫描100首歌曲的时间提高到了8、9秒左右;(本地下载速度大概300K左右)

3.解析网页的方法由之前的HtmlParser变成了现在的BeautifulSoup;

要运行此功能需要安装PyQt、BeautifulSoup。运行之前需要在settings.py文件中配置百度账号和密码。

username = "your baidu acount" #配置你的百度账号 
password = "your baidu password" #配置你的百度密码 

配置好账户和密码后,直接双击spiderMan.py文件运行即可。

运行流程

1.首先由spiderMan.py进入主程序,开始运行。

2.主程序将控制权交给dispatcher调度程序,调度程序首先登录百度。

3.如果登录成功,调度程序开启8个子线程,由这8个子线程抓取百度新歌榜或百度热歌榜的歌曲链接,分析链接,获取真正的下载地址,并将下载地址、歌曲名称、歌手信息写入一个文本文件。

4.当子线程执行完毕,主程序读取上一步生成的文本文件,加载UI窗体。

整个过程如下图:

正常运行后的效果如下图:

问题:

在github上tigerstudent提出了两个问题:

1.文件spiderMan.py中获取当前脚本所在的目录 root = os.path.dirname(__file__)+"/" 获取到的目录为空,建议应该用os.getcwd()。

这里我实际想要的是当前脚本所在的绝对路径,正确的脚本应该是这样的:os.path.abspath(os.path.dirname(__file__))+"/"

那么为什么os.path.dirname(__file__)os.getcwd()为什么都不行呢?os.path.dirname(__file__)是当前脚本相对于脚本的执行目录的相对路径,而os.getcwd()是脚本实际执行的目录。新建test.py文件,代码如下:

import os 
print("os.path.dirname(__file__):"+os.path.dirname(__file__)) 
print("os.getcwd():"+os.getcwd()) 

首先定位到计算机根目录/,执行如下命令:python /home/fengzheng/vimPython/BaiduMusicSpider-master/test.py,输出结果:

os.path.dirname(__file__):/home/fengzheng/vimPython/BaiduMusicSpider-master 
os.getcwd(): 

 定位到/home/fengzheng/vimPython/,执行如下命令:python BaiduMusicSpider-master/test.py,输出结果:

os.path.dirname(__file__):BaiduMusicSpider-master 
os.getcwd():/home/fengzheng/vimPython 

这样说吧,抛开执行上的参数值,在windows下把命令理解为单击鼠标直接运行的操作,os.path.dirname(__file__)就是所执行的脚本文件对于当前所处的目录的相对路径,而os.getcwd()就是当前执行这个脚本所在的路径,即在哪个位置执行就是那个位置的路径。

2.有一些路径字符串中用的是”\”,正确的写法应该是”/”,因为当时是在windows上写的,没太注意。

github下载地址如下:下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 一篇文章看懂python如何执行cmd命令

    一篇文章看懂python如何执行cmd命令

    这篇文章主要给大家介绍了关于如何通过一篇文章看懂python如何执行cmd命令的相关资料,在Python中可以使用多种方法执行cmd命令,文中通过代码示例将每种方法都介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • 使用Python批量移除Word文档水印的代码示例

    使用Python批量移除Word文档水印的代码示例

    移除Word文档中的水印可以减少不必要的麻烦,通过使用Python这样的编程语言,我们可以轻松实现自动化操作,高效地移除Word文档中的水印,确保文档的专业性和准确性,本文将介绍如何使用Python批量移除Word文档中的水印
    2024-07-07
  • python 截取XML中bndbox的坐标中的图像,另存为jpg的实例

    python 截取XML中bndbox的坐标中的图像,另存为jpg的实例

    这篇文章主要介绍了python 截取XML中bndbox的坐标中的图像,另存为jpg的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python打包成exe文件的详细操作指南

    Python打包成exe文件的详细操作指南

    Python越来越被大家所关注,随着越来越多的人开始学习Python代码大家其实或多或少都会遇到一些问题,下面这篇文章主要给大家介绍了关于Python打包成exe文件的详细操作,需要的朋友可以参考下
    2022-06-06
  • Python中弱引用的神奇用法与原理详解

    Python中弱引用的神奇用法与原理详解

    弱引用在很多语言中都存在,最常用来解决循环引用问题,下面这篇文章主要给大家介绍了关于Python中弱引用的神奇用法与原理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 基于python实现在excel中读取与生成随机数写入excel中

    基于python实现在excel中读取与生成随机数写入excel中

    最近接个项目,项目要求是这样的:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩,具体实现代码大家参考下本文
    2018-01-01
  • 使用Python创建快捷方式管理应用

    使用Python创建快捷方式管理应用

    在Windows系统中,快速访问常用程序通常通过“开始菜单”中的“应用热门”功能实现,在这篇博客中,我将向你展示如何使用Python和wxPython创建一个GUI应用,帮助用户轻松将桌面上的快捷方式添加到Windows“开始菜单”的“应用热门”中,需要的朋友可以参考下
    2024-08-08
  • Python数据库sqlite3图文实例详解

    Python数据库sqlite3图文实例详解

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎,下面这篇文章主要给大家介绍了关于Python数据库sqlite3的相关资料,需要的朋友可以参考下
    2022-09-09
  • 聊聊python 逻辑运算及奇怪的返回值(not,and,or)问题

    聊聊python 逻辑运算及奇怪的返回值(not,and,or)问题

    在Python中,真值为假的对象,包括False,None,数字0,空字符串以及空的容器类型,除此以外的任何对象均为真,本文重点给大家介绍python 逻辑运算及奇怪的返回值(not,and,or)问题,感兴趣的朋友一起看看吧
    2022-03-03
  • python函数局部变量用法实例分析

    python函数局部变量用法实例分析

    这篇文章主要介绍了python函数局部变量用法,较为详细的分析了Python局部变量的原理与使用技巧,并对比分析了局部变量与global全局变量的用法区别,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论