用python实现的百度音乐下载器-python-pyqt-改进版
之前写过一个用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窗体。
整个过程如下图:
正常运行后的效果如下图:
问题:
在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-pyqt-改进版的更多相关文章
- Qt+Python开发百度图片下载器
一.资源下载地址 https://www.aliyundrive.com/s/jBU2wBS8poH 本项目路径:项目->收费->百度图片下载器(可试用5分钟) 安装包直接下载地址:htt ...
- Python实战:美女图片下载器,海量图片任你下载
Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...
- SongTaste音乐下载器
SongTaste音乐下载器 Songtaste是一个非常好的音乐推荐网站, 奈何和duomi搅合在一起, 导致下载音乐非常的麻烦, 现在写了一个简单的"下载器", 通过它可以下载 ...
- 精品工具【音乐下载器(可下载VIP音乐)】
工具信息 更新时间:2020年5月26日00点07分更新内容:1. 增加快捷键2. 细分下载列表清除功能一款可以下载付费音乐的音乐下载器 下载链接:https://nitian1207.lanzous ...
- 使用python做一个IRC在线下载器
使用python做一个IRC在线下载器 1.开发流程 2.软件流程 3.开始 3.0 准备工作 3.1寻找API接口 3.2 文件模块 3.2.1 选择文件弹窗 3.2.2 提取文件名 3.2.2.1 ...
- 用 python 实现一个多线程网页下载器
今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...
- Android获取百度音乐下载音乐和歌词下载链接
首先,你必须通过以下连接下载歌曲: http://box.zhangmen.baidu.com/x?op=12&count=1&title={title}$${author}$$$$ ...
- 使用python打造一款音乐播放器
作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...
- 百度文库下载器 V2.3.4.3 支持豆丁百度文库道客巴巴
支持豆丁百度文库道客巴巴免下载劵财富值导出word 下载地址: http://pan.baidu.com/s/1qYCmQde
随机推荐
- 程序员玩转A股
最近买了点股票....赔了25%......劝各位程序员还是买键盘,买电脑吧.不用理财.... 基本情况 毕业一年多点,手里有点闲钱,闲得慌,10月底开了账户买股票.两只半仓股,赔了15%+,全仓一支 ...
- centos添加和删除用户及 xxx is not in the sudoers file.This incident will be reported.的解决方法
修改主机名:vim /etc/sysconfig/network 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 # ...
- react native 刷新机制----通知
在项目中,不知道大家有没有遇到这样的一个问题,比如说有两个页面A,B.A页面中有某个按钮点击后可以跳转到B页面,现在有一个需求就是,我在B页面中做了某些操作,然后点击回退按钮,回到A页面,A页面中的数 ...
- 《UML大战需求分析》阅读随笔(四)
状态机图(State Machine Diagram),状态机图是通过描述某事物状态的改变来展现流程的.一般适用于流程围绕某个事物展开,例如请假的流程就围绕请假条的展开.语法,开始于结束符号,实心圆表 ...
- HDU 4467 分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...
- hihocoder挑战赛13A
#1191 : 小W与网格 描述 给定一个n*m的网格,左上角(1, 1),右下角(n, m). 小w在(i, j),他会从"上左下右"四个方向中选定两个不同但正交的方向,然后他只 ...
- 已知服务器ftp的账号密码,求解数据库表的内容
一开始觉得这两个是完全不相干的东西,直到出现了这样一个问题,对方网站只有ftp的账号密码,并且能正常访问到代码.但是当需求了解注册人数的时候,后台没有显示,只能到数据库去找,这时怎么找呢? 原来是可以 ...
- Android 腾讯入门教程( 智能手表UI设计 和 MVC模式 )
*****注意到mvc 在android 中是如何进行分层分域执行各自的功能.**** 官方推荐的按钮尺寸是48像素 前端之Android入门(1):环境配置 前端之Android入门(2):程序目录 ...
- Easyui之datagrid实现点击单元格修改单元格背景颜色
前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格 ...
- 基础2.Jquery过滤选择器
1.基础选择器: 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的 ...