python3 requets+re 批量爬取千千(原百度)音乐
以前实验室同学需要文章和音乐,需要用爬虫爬.....要做东西参加比赛,表示好久都没写爬虫了....正如今天的正题,批量爬取千千音乐(原百度音乐)...博主会写下爬取的过程和心得(采坑记录),批量下载的音乐的有效代码虽然才50多行,但是采坑会花费大量时间和精力...
老规矩放几张镇楼图正好博主也正在爬数据.....代码会自动创建在桌面的文件夹,里面包含8种类别的子文件夹(文件夹的种类会随着tag类别列表中个数增加而增加,可以更改,增加或者删除),子文件夹中会保存音乐。
首先进入千千音乐首页,点击千千音乐,然后进入分类:会发现有很多种类的音乐,我们要批量爬取就需要解析每一类的音乐,当然这里面有的类,都可以在tag列表里面添加或者修改。
我们点击安静类别的音乐,发现列出20首音乐在每一页页面上,都在网页中li标签中,每一首歌都有一个独有的song_id
当我们点击页面 那首歌,就会进入播放页面,播放当前音乐,因为服务器有请求音乐的连接,但是被隐藏起来在,所以不得不花费大量时间去找。
由于博主踩过了很多坑,这里我就直接告诉大家音乐的连接怎么找,每一首的音乐资源都会由唯一的song_id,在js里面再次请求,拿到音乐资源的信息,如下图:
第一张图上面网址进行请求后会得到,图二的返回歌曲的信息,包括歌曲的源出去,file_link=后面的地址,进行请求的时候,就能下载,会提示下载如下:
所以file_link就是每首歌的地址,当我们直接复制进行请求就能下载了,付费 的歌曲也可以!是不是很神奇,所以找歌曲的源信息到大概讲解到这里就结束了。
接下来就是50多行代码实现的过程:
定义4个函数,分别如下,Get_text()实现网页请求得到页面的信息,返回text类型的数据。get_songId解析每一页20首歌曲的song_id,返回一个列表,传给下载音乐的函数download_music使用,进行音乐下载。dowanload_music就是下载音乐的过程。
def Get_text(url):
def get_songId(html):
def download_music(song_ids,tag):
def main():
接下来,就说下两个函数的要点:main函数里面对每类tag列表中类别进行爬取,然后对多页请求:我们进行多次翻页后对安静类音乐分析:
# http://music.taihe.com/tag/安静 安静第一页
# http://music.taihe.com/tag/安静?start=20&size=20&third_type=0 安静第二页
# http://music.taihe.com/tag/安静?start=40&size=20&third_type=0 安静第三页
可以发现每一类是20首音乐,也就是size=20,第二页:start=20,表示从20开始到请求20首后40结束,第三页:start 40,表示从40开始,请求20首到60结束,所以我们可以发现规律,是第几页就是i*20开始,size为20的请求,i从0开始,由此可以推得第五页是80开始,到100结束。我们下载100首就循环5次,需要很多就循环更多次。
def main():#音乐类型tags=['安静','美好','轻松','舒服','喜悦','想念','唯美','小清晰']##桌面路径(依据每个人的电脑情况可以更改路径)path = "D:\QQPCMgr(1)\Desktop\音乐\\"#创建每个音乐种类文件夹分类for tag in tags:#判断每种类别音乐文件夹是否存在,不存在就创建if not os.path.exists(path+tag):os.mkdir(path+tag)tag_url="http://music.taihe.com/tag/"for tag in tags:#每页20首,下载5页for num in range(5):start_url=tag_url+tag+"?start=%s&size=20&third_type=0"%str(num*20)#获取每页的信息html = Get_text(start_url)#h获取每页的每首歌的idsong_ids=get_songId(html)#下载download_music(song_ids,tag)
if __name__ == '__main__':main()
接下来就下载音乐的函数:我们把每首歌的song_id拿到后,再去动态拼接资源网址:只需要把songid=后面添加拿到的id就行,再次进行请求得到音乐资源的信息。这个网址可以在F12里面进行找,不是固定的,每一首可能有点不一样,但是都可以用,只需要songid就行。
http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery172009464779806914603_1542961432060&songid=%s&from=web&_=1542961435466"%song_id
把每个id拿去与上面的网址动态拼接,再请求就是每一首歌的信息,由于返回的是json格式的数据,所以需要需要转换成字典,
需要用json.loads把数据转换成字典,在去取歌曲的信息。需要的是歌名,歌手,歌曲链接,当然还有其他的也可以自己根据需要获取。就贴出源码:有问题可以点击左上角头像,微信向博主提问也可以留言反馈...
# coding=gbk
import requests,re,json,osdef Get_text(url):try:r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encodingprint("请求成功")return r.textexcept:print("请求失败")def get_songId(html):#正则取出每一页歌曲的songidsongIds=re.findall(r'<a href="/song/(.*?)".*?',html)# print(songIds)return songIds
def download_music(song_ids,tag):for song_id in song_ids:#拼接每一首歌的songidurl="http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery172009464779806914603_1542961432060&songid=%s&from=web&_=1542961435466"%song_id#再次请求html=Get_text(url)try:#z正则取出songiddata=re.findall(r'\((.*?)\)',html)[0]#转换成字典data=json.loads(data)except:continueprint("歌曲地址:"+data['bitrate']['file_link'])try:print("歌曲:"+data['songinfo']['title'])print("歌手:"+data['songinfo']['author'])except:continueauthor=data['songinfo']['author']song_name=data['songinfo']['title']url=data['bitrate']['file_link']try:sorce=requests.get(url)print("音乐%s获取成功"%song_name)except:print("*****音乐%s获取失败****"%song_name)continue#存储在桌面的文件路径下path="D:\QQPCMgr(1)\Desktop\音乐\\"name=tag+'/'with open(path+name+author+'-'+song_name+'.mp3',"wb") as file:try:file.write(sorce.content)file.close()print("##%s下载成功##"%song_name)except:print("***********%s下载失败*********"%song_name)def main():#音乐类型tags=['安静','美好','轻松','舒服','喜悦','想念','唯美','小清晰']##桌面路径(依据每个人的电脑情况可以更改路径)path = "D:\QQPCMgr(1)\Desktop\音乐\\"#创建每个音乐种类文件夹分类for tag in tags:#判断每种类别音乐文件夹是否存在,不存在就创建if not os.path.exists(path+tag):os.mkdir(path+tag)tag_url="http://music.taihe.com/tag/"for tag in tags:#每页20首,下载5页for num in range(5):start_url=tag_url+tag+"?start=%s&size=20&third_type=0"%str(num*20)#获取每页的信息html = Get_text(start_url)#h获取每页的每首歌的idsong_ids=get_songId(html)#下载download_music(song_ids,tag)
if __name__ == '__main__':main()
python3 requets+re 批量爬取千千(原百度)音乐相关推荐
- python3爬虫实例(一)---爬取酷狗TOP500的音乐信息
前言 学习完requests库与beautifulsoup这个库后,我们就可来搞一个简单的爬虫了,这次我们爬取酷狗音乐的TOP500的歌曲信息,包含排名,歌名,歌曲时长.分分钟爬取下来. 分析URL链 ...
- 刚刚用python爬取一千个微信朋友圈数据,他们的秘密原来这么多。
当下我们饮食起居基本上依靠微信,但微信不单单是1个即时通信软件,更像是仿真模拟的日常生活世界.你所处的微信朋友圈是咋样,慢慢地你的思想也会变的咋样.近几日在学习 itchat,并且写了1个网络爬虫,扒 ...
- Python爬虫学习,批量爬取下载抖音视频
这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙 项目源码展示 ''' 注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料, ...
- 批量爬取27270美女栏目图片
批量爬取27270美女栏目图片 运行了一个晚上小水管太慢了,才爬了几万张图片. 做了一下重复抓取,设定抓取八次 写了一下日志,但是想了一下还是注释掉了 代码里面有很多修修改改的痕迹, 如果愿意的话可以 ...
- python3和burpsuite组合爬取网页数据并存储在excel表格(需要登录后才能看到的大量数据)
python3和burpsuite组合爬取网页数据并存储在excel表格 作者:ch4nge 时间:2020.12.18 前言 最近在工作中遇到一个问题:渗透进入某网站后台,发现大量的用户数据(某恶意 ...
- python自动搜索爬取下载文件-python批量爬取下载抖音视频
本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...
- python爬取抖音用户数据_python批量爬取下载抖音视频
本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...
- json spr路驾驶技术视频api_每天弄个小爬取之Python爬取批量爬取B站小视频
1. 批量爬取B站小视频 哔哩哔哩网站(英文名称: bilibili),是年轻人的文化社区,被粉丝们亲切的称为B站.该网站中拥有动画.番剧.国创.音乐.舞蹈.游戏.科技.生活.鬼畜.娱乐.时尚等多个内 ...
- Python每日一练(9)-批量爬取B站小视频
目录 1. 批量爬取B站小视频 2. 获取动态请求的JSON数据 3. 随机生成浏览器的头部信息 4. 获取要下载视频的大小 5. 实时打印文件下载进度 1. 批量爬取B站小视频 哔哩哔哩网站(英文名 ...
最新文章
- 你还在百度这些代码吗?
- 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
- NSRunLoop概述(转)
- saiku添加mysql数据源_Saiku连接mysql数据库(二)
- QualityCenter的备份
- python 计时_python怎么实现计时
- 如何注册java程序为windows服务
- Jboss启动报错——DailyRollingFileAppender无法转换异常
- C++的类为什么要用指针
- 《网管员世界》记者走基层采访实录
- 高等数学(第七版)同济大学 习题1-2 个人解答
- 常见分类算法优缺点比较
- 【014】Excel宏编程的交互解析(MsgBox)_001_#VBA
- 调频连续波雷达基本原理(1)-测距原理详解
- MySQL基础之二 | 详解(SQL-DDL)
- 项目异常Too many open files
- js常用的正则匹配(一般不用修改)
- 囚徒困境(进化优化算法)
- 开心开源 |COSCon'21 志愿者招募正式启动
- Oracle表空间扩展