用python实现的百度新歌榜、热歌榜下载器
首先声明,本工具仅仅为学习之用,不涉及版权问题,因为百度音乐里面的歌曲本身是可以下载的,而且现在百度也提供了”百度音乐播放器”,可以通过这个工具进行批量下载。
我当时做这个工具的时候,百度还没有提供”百度音乐播放器”,而我又想批量下载,所以做了这样的一个下载工具。当然,主要还是为了学习。
工具采用Python2.7.3+PyQt开发。
功能:
1.集中展示百度新歌榜或热歌榜可下载的歌单。
2.支持单个、多个歌曲的下载。
3.可复制歌单中所有的链接内容,方便在迅雷等下载工具中创建下载组。
缺陷:
目前采用单线程,效率不高,UI界面容易假死。
本工具运行流程:
1.模拟用户登录百度。
2.若登录成功,采集并解析页面内容,加载歌单列表。
3.用户点击下载按钮或者批量下载按钮后,下载歌曲。
使用方法:
1.在配置文件setting.py的最后,配置可登录百度的账号和密码,及百度热歌榜或新歌榜的URL.
username = "your baidu acount" #配置你的百度账号
password = "your baidu password" #配置你的百度密码 musiclistUrl = "http://music.baidu.com/top/dayhot" # http://music.baidu.com/top/new
2.直接运行mainWindow.py文件即可,如果网速不给力的话可能要等上3、4分钟。
运行后如图:
用到的知识:
1.首先用到了PyQt的GUI编程,窗体布局及QTableWidget、QProgressBar、QPushButton等控件及控件的重写
2.用到了网络编程的部分内容,利用urllib,urllib2,cookielib请求网页,模拟登录百度。
3.利用HTMLParser解析网页内容,匹配网页元素。
4.利用codecs进行文件的读写。
遇到的问题:
1.编码问题,由于在创建文件时将文件编码设置为UTF-8,当需要向文件写入的内容为中文等非ASCII码内容时,总是提示编码问题。其实,百度音乐的网页全部为UTF-8格式,因此从网页中获取的内容也是UTF-8格式,但是,要讲内容写入UTF-8的文本中,必须将网页内容进行decode(“utf8”)解码为unicode格式,才能正常写入。
检测内容编码,可以用chardet模块的chardet.detect(“内容”)的方法。
另外,HTMLParser解析网页内容过程中,有的下载页面会出现问题,根据提示信息发现还是编码问题,将feed()方法中的内容参数进行decode(“utf8”)后,结果正常。
decode将内容根据参数内容解码为unicode类型,具体要根据所采集的页面的编码。
github下载地址:点这里
用python实现的百度新歌榜、热歌榜下载器的更多相关文章
- 用python实现的百度音乐下载器-python-pyqt-改进版
之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt ...
- Python学习-使用Python爬取陈奕迅新歌《我们》网易云热门评论
<后来的我们>上映也有好几天了,一直没有去看,前几天还爆出退票的事件,电影的主题曲由陈奕迅所唱,特地找了主题曲<我们>的MV看了一遍,还是那个感觉.那天偶然间看到Python中 ...
- Python爬取网易云热歌榜所有音乐及其热评
获取特定歌曲热评: 首先,我们打开网易云网页版,击排行榜,然后点击左侧云音乐热歌榜,如图: 关于如何抓取指定的歌曲的热评,参考这篇文章,很详细,对小白很友好: 手把手教你用Python爬取网易云40万 ...
- Python抓取百度汉字笔画的gif
偶然发现百度汉语里面,有一笔一划的汉字顺序: 觉得这个动态的图片,等以后娃长大了,可以用这个教写字.然后就去找找常用汉字,现代汉语常用字表 .拿到这里面的汉字,做两个数组出来,一共是 ...
- Python抓取百度百科数据
前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...
- python—webshell_醉清风xf_新浪博客
python—webshell_醉清风xf_新浪博客 python—webshell (2012-05-23 09:55:46) 转载▼
- Python爬虫之小试牛刀——使用Python抓取百度街景图像
之前用.Net做过一些自动化爬虫程序,听大牛们说使用python来写爬虫更便捷,按捺不住抽空试了一把,使用Python抓取百度街景影像. 这两天,武汉迎来了一个德国总理默克尔这位大人物,又刷了一把武汉 ...
- 将python工程部署到新服务器(对virtualenv工具进行环境迁移)
将python工程部署到新服务器(对virtualenv工具进行环境迁移) # 从开发的电脑上导出 pip list 到 requirements.txt 文件pip freeze > requ ...
- python开发的百度翻译接口
做的一个python版的百度翻译,附代码 #!/usr/bin/env python # -*- coding:utf-8 -*- ''' 爬虫之百度翻译 需要的库有 js2py, request ...
随机推荐
- 用Backbone.js教程系列的链接
整理了一下用Backbone.js系列教程链接. Backbone.js入门教程 用Backbone.js创建一个联系人管理系统(一) 用Backbone.js创建一个联系人管理系统(二) 用Back ...
- 类Collections的静态方法
类Collections的静态方法 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成. 排序 static <T extends Comparable& ...
- VS与ultraedit 正则表达式替换
ASP中把request("{param}")调用替换为requestX("{param}") VS 表达式替换(?<a>request\(&quo ...
- C# 通过身份证查询出生日期
private int GetAgeBycode(string b_car_code) { string birthday = ""; //处理18位的身份证号码从号码中得到生日和 ...
- LInux配置jdk(mac和windows)
我的linux使用的是VMware搭建的虚拟环境,用的是CENTOS6.5 一.准备工作: 1.确定系统安装的是成功的. 2.系统没有其他的问题 3.确定没有安装过其他版本的jdk,两个jdk会反冲 ...
- 如何在CentOS 5/6上安装EPEL 源
EPEL 是什么? EPEL (Extra Packages for Enterprise Linux,企业版Linux的额外软件包) 是Fedora小组维护的一个软件仓库项目,为RHEL/CentO ...
- Postman-进阶
Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins 管理请求 保存请求-添加“打开百度首页请求” 设置请求方式为Get,地址为www.baidu.com.点击右 ...
- python中协程的使用示例
例子1 把字符串分割为列表 def line_splitter( delimiter = None ): print( 'ready to split' ) result = None while T ...
- 数据库SQLite
一.数据库 在项目开发中,通常都需要对数据进行离线缓存的处理,如新闻数据的离线缓存等.离线缓存一般都是把数据保存到项目的沙盒中.有以下几种方式: 归档:NSKeyedArchiver 偏好设置:NSU ...
- sqlserver 2008 数据库表结构脚本及数据导出
sqlserver2008 在xp上尝试安装了 sqlserver2008 express版本,但是和公司的sqlserver2008 r2 版本不兼容.升级的时候,出了问题.所以换了中思路,将数据 ...