基于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实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
python中迭代器(iterator)用法实例分析
Apr 29 Python
一个基于flask的web应用诞生 使用模板引擎和表单插件(2)
Apr 11 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
python实现三次样条插值
Dec 17 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
python3 pillow模块实现简单验证码
Oct 31 Python
Python SSL证书验证问题解决方案
Jan 13 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
Python如何将模块打包并发布
Aug 30 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判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
关于jQuery中的end()使用方法
2011/07/10 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
python基于socket实现网络广播的方法
2015/04/29 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
Python之用户输入的实例
2018/06/22 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python编程中类与类的关系详解
2019/08/08 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
pygame实现成语填空游戏
2019/10/29 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
一个C/C++编程面试题
2013/11/10 面试题
广告学专业自荐信范文
2014/02/24 职场文书
关于环保的标语
2014/06/13 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
浅谈由position属性引申的css进阶讨论
2021/05/25 HTML / CSS