基于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实现的简单模板引擎功能示例
Sep 02 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
pycharm访问mysql数据库的方法步骤
Jun 18 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
python学习将数据写入文件并保存方法
Jun 07 Python
python基于win32api实现键盘输入
Dec 09 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
php遍历数组的4种方法总结
2014/07/05 PHP
PHP中echo和print的区别
2014/08/28 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
在一个页面重复使用一个js函数的方法详解
2016/12/26 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
整理Python中的赋值运算符
2015/05/13 Python
wxpython实现图书管理系统
2018/03/12 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python url 参数修改方法
2018/12/26 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
2019/08/10 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
2020/06/02 Python
pytorch SENet实现案例
2020/06/24 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
python 实现"神经衰弱"翻牌游戏
2020/11/09 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
学生励志演讲稿
2014/01/06 职场文书
社区工作者感言
2014/03/02 职场文书
对孩子的寄语
2014/04/09 职场文书
2014年劳动部工作总结
2014/12/11 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
Python卷积神经网络图片分类框架详解分析
2021/11/07 Python
linux目录管理方法介绍
2022/06/01 Servers