基于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之ReportLab绘制条形码和二维码的实例
Jan 15 Python
查看django版本的方法分享
May 14 Python
python生成ppt的方法
Jun 07 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python 将字符串中的数字相加求和的实现
Jul 18 Python
Python使用Paramiko控制liunx第三方库
May 20 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
Python机器学习算法之决策树算法的实现与优缺点
May 13 Python
Python实战之实现简易的学生选课系统
May 25 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
Python编程源码报错解决方法总结经验分享
Oct 05 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和Shell实现检查SAMBA与NFS Server是否存在
2015/01/07 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
CSS和Javascript简单复习资料
2010/06/29 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
Vue+axios封装请求实现前后端分离
2020/10/23 Javascript
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python开发中range()函数用法实例分析
2015/11/12 Python
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
python中if及if-else如何使用
2020/06/02 Python
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
Mio Skincare英国官网:身体紧致及孕期身体护理
2018/08/19 全球购物
教育孩子心得体会
2014/01/01 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
何玥事迹观后感
2015/06/16 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
感恩父母主题班会
2015/08/12 职场文书
一波干货,会议主持词开场白范文
2019/05/06 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang