基于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中去空格函数的用法
Aug 21 Python
Python实现抓取城市的PM2.5浓度和排名
Mar 19 Python
Python去除字符串两端空格的方法
May 21 Python
Python3读取UTF-8文件及统计文件行数的方法
May 22 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
May 04 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
python创造虚拟环境方法总结
Mar 04 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 Python
Python利器openpyxl之操作excel表格
Apr 17 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输出英文时间日期的安全方法(RFC 1123格式)
2014/06/13 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
详解express与koa中间件模式对比
2017/08/07 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
jQuery实现点击自身以外区域关闭弹出层功能完整示例【改进版】
2018/07/31 jQuery
如何高效使用Python字典的方法详解
2017/08/31 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
使用python实现ANN
2017/12/20 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Django实现auth模块下的登录注册与注销功能
2019/10/10 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
2020/01/19 Python
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
Vans(范斯)德国官网:美国南加州的原创极限运动潮牌
2017/05/02 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
新浪网技术部笔试题
2016/08/26 面试题
网络体系结构及协议的定义
2014/03/13 面试题
餐厅销售主管职责范本
2014/02/19 职场文书
学生自我评语
2015/01/04 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python
Python保存并浏览用户的历史记录
2022/04/29 Python
mybatis 获取更新记录的id
2022/05/20 Java/Android