Python3简单爬虫之下载相关类型音乐(喜马拉雅网站)
一,简单介绍python
1.众所周知,python在近几年可以说是非常火爆,在受欢迎排名上经常位于前列
2017年IEEE Spectrum 最新的研究报告
2018年TIOBE 刚刚发布了 6 月编程语言排行榜
2.百科简单介绍
Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。
Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。等等。
3.python优势及推荐视频
Python相对于其他语言有以下的优势:
1、Python易于学习
2、Python让你能用少量的代码构建出更多的功能
3. Python是一门多才多艺的语言,似乎每个领域都可以使用:系统操作,Web开发,部署,科学建模等,大抵找不出第二个更多才多艺的语言了。
4.Python拥有最成熟的程序包资源库之一
5.Python在数据科学领域被广泛使用
Python教学视频:
1. 腾讯课堂上的马哥教育视频
2. 廖雪峰的python教程网站
3. B站上的python视频(小甲鱼零基础入门学习)
4. 有问题也可以上博客知乎等查找资料
二,爬虫过程(抓取喜马拉雅网站的音乐并下载在文件夹上)
1.实验环境
win10,pycharm,python3.6,火狐浏览器
2.添加相关库
打开pycharm
点击设置
搜索相关库并添加,例如:requests
新建文件
用火狐浏览器打开喜马拉雅网站,再点击音乐,可以得到喜马拉雅音乐模块的url
点击流行和摇滚,我们可以观察并发现https://www.ximalaya.com/yinyue/与搜索内容拼音组合即使是搜索结果的url
然后我们发现未点击播放时抓取的信息的页面:
点击播放后的页面:
所以我们会发现多出get方法的一个json文件
观察上面两张图片:浏览这个json
并在浏览器打开这个网址:
https://www.ximalaya.com/revision/play/album?albumId=391242&pageNum=1&pageSize=30
观察可知,可以看到albumId,还有音频文件url:
"http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a" |
访问搜索界面的源代码,查找albumId,通过这些albumid获取音频文件的url
最后使用函数urllib.request.urlretrieve()下载音乐
效果如下:
文件夹里下载好的歌曲:
具体代码:
import requests import re #正则表达式 import urllib #下载音乐的库 from pypinyin import pinyin, lazy_pinyin import pypinyin #转为拼音的库 header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'} ##伪装成浏览器 def Pinyin(search): #输入要查找的内容0 l=lazy_pinyin(search) #字符串转化为拼音 str1 = "".join(l) return str1 def SearchHtml(str,header): #获取搜索得到的html url= 'https://www.ximalaya.com/yinyue/'+str #print(url) html=requests.get(url,headers=header) #print(html.status_code) html.encoding=html.apparent_encoding #print(html.text) return html #"albumId":3961176,"title":"六喜珠宝-车载音乐 欧美乡村民谣" def albumId(html): #获取albumId的值 并将albumId与https://www.ximalaya.com/revision/play/album?albumId=组合json的url d=re.findall(r'"albumId":(.*?),',(html).text) url3=[] for x in (d[:1]): url2='https://www.ximalaya.com/revision/play/album?albumId='+x html2=requests.get(url2,headers=header) #src "http://audio.xmcdn.com/group12/M03/2C/AA/wKgDW1WJ7GqxuItqAB8e1LXvuds895.m4a" url3=(re.findall(r'"src":"(.*?)"',(html2).text)) return url3 def title(html): t=re.findall(r'"title":"(.*?)"',(html).text) #获取titile(歌名)的值 return t def Download(url,title): #下载音乐 n=0 for y in url: try: print("正在下载——"+str(t[n])) urllib.request.urlretrieve(y,r'D:\zachary\喜马拉雅音乐\\'+str(t[n]+'.m4a')) print("下载——"+str(t[n])+"——成功") n=n+1 except: print("下载——"+str(t[n])+"——失败") str1=Pinyin('摇滚') html=SearchHtml(str1,header) t=title(html) url3=albumId(html) Download(url3,t)
三,结尾
谢谢各位观看。如有错误的地方,非常欢迎大家通知改正。谢谢。