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


Posted in Python onAugust 05, 2019

前言

之前写过一个用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窗体。

整个过程如下图:

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

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

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

问题:

在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 相关文章推荐
Python中__init__和__new__的区别详解
Jul 09 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
用Python实现一个简单的线程池
Apr 07 Python
详解python时间模块中的datetime模块
Jan 13 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
Python代码缩进和测试模块示例详解
May 07 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
tensorflow求导和梯度计算实例
Jan 23 Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
python3.7 openpyxl 在excel单元格中写入数据实例
Sep 01 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 #Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 #Python
selenium2.0中常用的python函数汇总
Aug 05 #Python
Django中使用CORS实现跨域请求过程解析
Aug 05 #Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 #Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 #Python
用django设置session过期时间的方法解析
Aug 05 #Python
You might like
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
广告代码静态化js通用函数
2007/05/09 Javascript
javascript操作table(insertRow,deleteRow,insertCell,deleteCell方法详解)
2013/12/16 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
Cython 三分钟入门教程
2009/09/17 Python
Python中关于使用模块的基础知识
2015/05/24 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
python 实现矩阵填充0的例子
2019/11/29 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
安德玛比利时官网:Under Armour比利时
2019/08/28 全球购物
货车司机岗位职责
2014/03/18 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
运动会搞笑广播稿
2014/10/14 职场文书
个人原因辞职信模板
2015/05/13 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
导游词之嵊泗列岛
2019/10/30 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB