基于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引用DLL文件的方法
May 11 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
一篇文章快速了解Python的GIL
Jan 12 Python
python调用自定义函数的实例操作
Jun 26 Python
如何使用python进行pdf文件分割
Nov 11 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
python中Mako库实例用法
Dec 31 Python
python日志通过不同的等级打印不同的颜色(示例代码)
Jan 13 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 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
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
js如何实现元素曝光上报
2019/08/07 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
python中的字典详细介绍
2014/09/18 Python
python中的闭包用法实例详解
2015/05/05 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python学生信息管理系统
2018/03/13 Python
Python后台管理员管理前台会员信息的讲解
2019/01/28 Python
Python的形参和实参使用方式
2019/12/24 Python
Pandas的数据过滤实现
2021/01/15 Python
python os.listdir()乱码解决方案
2021/01/31 Python
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
新闻记者个人求职的自我评价
2013/11/28 职场文书
销售顾问岗位职责
2014/02/25 职场文书
护理专业自荐信范文
2014/02/26 职场文书
总经理工作职责范文
2014/03/14 职场文书
二年级学生期末评语
2014/12/26 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
幼儿园教师安全责任书
2015/05/08 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技