以前实验室同学需要文章和音乐,需要用爬虫爬.....要做东西参加比赛,表示好久都没写爬虫了....正如今天的正题,批量爬取千千音乐(原百度音乐)...博主会写下爬取的过程和心得(采坑记录),批量下载的音乐的有效代码虽然才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 批量爬取千千(原百度)音乐相关推荐

  1. python3爬虫实例(一)---爬取酷狗TOP500的音乐信息

    前言 学习完requests库与beautifulsoup这个库后,我们就可来搞一个简单的爬虫了,这次我们爬取酷狗音乐的TOP500的歌曲信息,包含排名,歌名,歌曲时长.分分钟爬取下来. 分析URL链 ...

  2. 刚刚用python爬取一千个微信朋友圈数据,他们的秘密原来这么多。

    当下我们饮食起居基本上依靠微信,但微信不单单是1个即时通信软件,更像是仿真模拟的日常生活世界.你所处的微信朋友圈是咋样,慢慢地你的思想也会变的咋样.近几日在学习 itchat,并且写了1个网络爬虫,扒 ...

  3. Python爬虫学习,批量爬取下载抖音视频

    这篇文章主要为大家详细介绍了python批量爬取下载抖音视频,具有一定的参考价值,感兴趣的小伙 项目源码展示 ''' 注:如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料, ...

  4. 批量爬取27270美女栏目图片

    批量爬取27270美女栏目图片 运行了一个晚上小水管太慢了,才爬了几万张图片. 做了一下重复抓取,设定抓取八次 写了一下日志,但是想了一下还是注释掉了 代码里面有很多修修改改的痕迹, 如果愿意的话可以 ...

  5. python3和burpsuite组合爬取网页数据并存储在excel表格(需要登录后才能看到的大量数据)

    python3和burpsuite组合爬取网页数据并存储在excel表格 作者:ch4nge 时间:2020.12.18 前言 最近在工作中遇到一个问题:渗透进入某网站后台,发现大量的用户数据(某恶意 ...

  6. python自动搜索爬取下载文件-python批量爬取下载抖音视频

    本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...

  7. python爬取抖音用户数据_python批量爬取下载抖音视频

    本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 import os import requests import re import sys import a ...

  8. json spr路驾驶技术视频api_每天弄个小爬取之Python爬取批量爬取B站小视频

    1. 批量爬取B站小视频 哔哩哔哩网站(英文名称: bilibili),是年轻人的文化社区,被粉丝们亲切的称为B站.该网站中拥有动画.番剧.国创.音乐.舞蹈.游戏.科技.生活.鬼畜.娱乐.时尚等多个内 ...

  9. Python每日一练(9)-批量爬取B站小视频

    目录 1. 批量爬取B站小视频 2. 获取动态请求的JSON数据 3. 随机生成浏览器的头部信息 4. 获取要下载视频的大小 5. 实时打印文件下载进度 1. 批量爬取B站小视频 哔哩哔哩网站(英文名 ...

最新文章

  1. 你还在百度这些代码吗?
  2. 【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
  3. NSRunLoop概述(转)
  4. saiku添加mysql数据源_Saiku连接mysql数据库(二)
  5. QualityCenter的备份
  6. python 计时_python怎么实现计时
  7. 如何注册java程序为windows服务
  8. Jboss启动报错——DailyRollingFileAppender无法转换异常
  9. C++的类为什么要用指针
  10. 《网管员世界》记者走基层采访实录
  11. 高等数学(第七版)同济大学 习题1-2 个人解答
  12. 常见分类算法优缺点比较
  13. 【014】Excel宏编程的交互解析(MsgBox)_001_#VBA
  14. 调频连续波雷达基本原理(1)-测距原理详解
  15. MySQL基础之二 | 详解(SQL-DDL)
  16. 项目异常Too many open files
  17. js常用的正则匹配(一般不用修改)
  18. 囚徒困境(进化优化算法)
  19. 开心开源 |COSCon'21 志愿者招募正式启动
  20. Oracle表空间扩展

热门文章

  1. iocp配合acceptex
  2. 如果你要达到目标,首先要学会扎根
  3. Ubuntu的Kdump
  4. 什么是4D(DRG、DLG、DOM、DEM)数据?
  5. 安全测试都不敢写精通,还敢要25K?
  6. 贪婪算法(Greedy Algorithms)
  7. 金融培训直播的优势有哪些?
  8. python3入门之 deque(双向队列)
  9. 只用位运算符将十进制整数转换成32位二进制机器码
  10. java Random类