学习笔记:网络机器人6.0python爬取多类型音乐步骤详解
目标网址:音乐-谁伴我闯荡
爬虫逻辑:
【找到要获取特定音乐的url】>>>【找到该资源链接的url】>>>【封装获取音乐的函数】>>>【封装下载音乐的函数】
注意:
这两个获取url的顺序是和之前获取url的过程是反过来的,以往是获取外部页面的url后进入内部页面的url,然后再获取该页面的信息。
但是下载音乐(定向爬取数据),首先是要确定获取音乐的url(通过浏览器输入后点击可以直接播放–内部页面数据),然后再找其上一层的url(资源链接的url–外部页面数据)
- 网页结构分析
1) 找到所要获取音乐的url
在目标页面鼠标右键选择’检查’,右上方菜单栏点击’Network’,后进行网页刷新,接着查找右下区中php相关的文件,随后在’Preview’选项下点击’data’,查找到’play_url’,复制后面的内容使用浏览器打开后,就可以直接播放
2) 找到资源链接的ur
在上述的界面点击’Preview’旁边的’Headers’菜单栏,这时候发现’General’下的第一个信息就是资源链接的ur
3) 简化资源链接的url
通过上面的对比,可以发现,url里面的内容除了主站域名外,其他的几乎都是有可确定的字段拼接而成的,可以尝试将字段进行删减,比如先去掉最后的&_=1584364814789数据,看看网页是否返回数据,其次再往上一个字段的数据进行尝试,直到无法返回数据为止。通过测试发现,当把hash对应的数据删除后,网站不返回请求数据了。
2. 封装第一个函数
首先导入相关的库和设定相关的参数
import requests # 导入网络请求模块
import time # 导入时间模块
import math # 导入数学模块
import re # 导入正则表达式模块
import os # 导入系统模块
import json # 导入json模块
from bs4 import BeautifulSoup # 导入解析模块
1) url参数的设置
要爬取资源的url基础元素就是主站域名加上查找数据返回的文件信息(index.php?),其中data里面的数据(url基础元素后面的搜索参数),就是上一步测试简化url所对应的数据,因为测试到删除hash字段数据对应的网址不再返回页面数据信息,所以需要保留,那么hash之前的字段数据自然也需要保留了
url = 'https://wwwaxxx'data = {'r': 'play/getdata','callback': 'xxx','hash': 'xx'
}
其中关于’callback’参数里面的1594000626908数据,是一个时间计时,可以对应time库里面的.time方法。由此可以自己创造一个时间计时(代表着访问时间)
import time # 导入时间模块
import math # 导入数学模块print(math.floor(time.time()*1000)) # 当前时间戳
print(1594000626908)
2) 请求头设定
User-Agent和Referer数据都可以在当前的页面进行找到,但是没有cookie信息
cookie信息的获取,可以随便的点击一个有关post请求信息的页面
dic_headers = {'User-Agent': 'xxx','Referer': 'https://www.xxx'
}
3) 函数封装
① 初步封装获取返回的文本数据
import requests # 导入网络请求模块
import time # 导入时间模块
import math # 导入数学模块
import re # 导入正则表达式模块
import os # 导入系统模块
import json # 导入json模块
from bs4 import BeautifulSoup # 导入解析模块def get_musci(): # 定义获取音乐函数url = 'https://xxx' # 提取urldata = {'r': 'play/getdata','callback': 'xxx' + str(math.floor(time.time()*1000)),'hash': 'Fxx'} # 反爬虫参数设置dic_headers = {'cookie':'kxxx','User-Agent': 'xx','Referer': 'https://www.xx'} # 定制请求头html = requests.get(url, params=data, headers=dic_headers) # get请求,获取网页内容print(html.text) # 转换为文本输出start = html.text.index('{') # 从'{'开始截取end = html.text.index('})') + 1 # 以'})'结束json_data = json.loads(html.text[start:end]) # 转换python数据格式print(json_data) # 输出数据get_musci() # 调用函数
② 文本数据清洗转化为可识别类型数据
输出结果发现和之前获取腾讯新闻返回的结果有点类似,需要将数据转化为可识别的类型,然后进行程序导入,这里如果还按照数数的方法就有点效率低下了,使用.index的方法进行
start = html.text.index('{') # 从'{'开始截取end = html.text.index('})') + 1 # 以'})'结束json_data = json.loads(html.text[start:end]) # 转换python数据格式print(json_data) # 输出数据
③ 获取音乐名称和具体的音乐url
song_name = json_data['data']['song_name'] # 歌曲名song_author = json_data['data']['author_name'] # 作家song_url = json_data['data']['play_url'] # 歌曲链接name = song_name + '-' + song_author # 名字print(song_url) # 输出歌曲链接print(name) # 输出名字
3. 封装第二个函数
获得音乐资源后,就可以直接将音乐下载到本地了
def download_music(url,name): # 定义音乐下载print('正在下载音乐......') # 打印提示语with open(f'{name}.mp3','wb') as f: # 打开文件f.write(requests.get(url).content) # 写入内容print('音乐下载完毕') # 打印提示语
最后在第一个函数中调用该函数即可输出到本地
download_music(song_url, name) # 调用音乐下载函数
完整代码:
import requests # 导入网络请求模块
import time # 导入时间模块
import math # 导入数学模块
import re # 导入正则表达式模块
import os # 导入系统模块
import json # 导入json模块
from bs4 import BeautifulSoup # 导入解析模块def get_musci(): # 定义获取音乐函数url = 'https://wwwxxx' # 提取urldata = {'r': 'play/getdata','callback': 'xx_' + str(math.floor(time.time()*1000)),'hash': 'FDxxA'} # 反爬虫参数设置dic_headers = {'cookie':'xx','User-Agent': 'xx','Referer': 'https://www.xx'} # 定制请求头html = requests.get(url, params=data, headers=dic_headers) # get请求,获取网页内容#print(html.text) # 转换为文本输出start = html.text.index('{') # 从'{'开始截取end = html.text.index('})') + 1 # 以'})'结束json_data = json.loads(html.text[start:end]) # 转换python数据格式#print(json_data) # 输出数据song_name = json_data['data']['song_name'] # 歌曲名song_author = json_data['data']['author_name'] # 作家song_url = json_data['data']['play_url'] # 歌曲链接name = song_name + '-' + song_author # 名字print(song_url) # 输出歌曲链接print(name) # 输出名字download_music(song_url, name) # 调用音乐下载函数def download_music(url,name): # 定义音乐下载print('正在下载音乐......') # 打印提示语with open(f'{name}.mp3','wb') as f: # 打开文件f.write(requests.get(url).content) # 写入内容print('音乐下载完毕') # 打印提示语get_musci() # 调用函数
4. 拓展
已经可以下载所选定的音乐了,那么可不可以创建一个音乐的下载器呢?那么会员就不用开了,直接白嫖了呢,再尝试一下其他的歌曲,比如我想白嫖周杰伦的晴天,还是相同的步骤
1) 单个音乐文件下载
只需要对比一下获取资源链接的url即可
尝试只替换hash参数数据,其余的不变
2) 音乐文件批量下载
输出结果显示,只需要通过修改’hash’字段就可以实现音乐数据的下载,那么批量数据下载的前提就是找到每首歌对应的’hash’值
第一种:直接在音乐名称的标签上可获得’hash’数据
import requests # 导入网络请求模块
import time # 导入时间模块
import math # 导入数学模块
import re # 导入正则表达式模块
import os # 导入系统模块
import json # 导入json模块
from bs4 import BeautifulSoup # 导入解析模块def get_musci(hash_data): # 定义获取音乐函数url = 'https://wwXXX' # 提取urldata = {'r': 'play/getdata','callback': 'XXX' + str(math.floor(time.time()*1000)),'hash': str(hash_data)} # 反爬虫参数设置dic_headers = {'cookie':'XXX','User-Agent': 'XXX','Referer': 'https://www.XXX'} # 定制请求头html = requests.get(url, params=data, headers=dic_headers) # get请求,获取网页内容#print(html.text) # 转换为文本输出start = html.text.index('{') # 从'{'开始截取end = html.text.index('})') + 1 # 以'})'结束json_data = json.loads(html.text[start:end]) # 转换python数据格式#print(json_data) # 输出数据song_name = json_data['data']['song_name'] # 歌曲名song_author = json_data['data']['author_name'] # 作家song_url = json_data['data']['play_url'] # 歌曲链接name = song_name + '-' + song_author # 名字print(song_url) # 输出歌曲链接print(name) # 输出名字download_music(song_url, name) # 调用音乐下载函数def download_music(url,name): # 定义音乐下载print('正在下载音乐......') # 打印提示语with open(f'{name}.mp3','wb') as f: # 打开文件f.write(requests.get(url).content) # 写入内容print('音乐下载完毕') # 打印提示语def get_hash_data(): # 定义获取哈希函数url = 'https://www.XXX' # 提取urlhtml = requests.get(url) # get请求,获取网页内容soup = BeautifulSoup(html.text,'lxml') # 解析网页内容hash_datas_a = soup.select('#songs li a') # 定位到哈希所在标签for hash_data_a in hash_datas_a[:5]: # 遍历哈希所在的标签hash_data = hash_data_a['data'].split('|')[0] # 提取哈希#print(hash_datas_a)#print(hash_data)get_musci(hash_data) # 调用获取音乐函数get_hash_data() # 调用获取哈希函数
第二种:在音乐名称的标签上不可获得’hash’数据
这时候可以在标签信息窗口调用搜索窗口(ctrl + f),手动输入hash进行匹配,可以发现,所有音乐的’hash’都被放置在一起了
封装第四个函数,这里就需要使用到正则表达式了
def get_hash_data1(): # 定义另一种获取哈希函数方式url = 'https://www.XXXl' # 提取urlhtml = requests.get(url) # get请求,获取网页内容# print(html.text)hash_data_lst = re.findall(r'{"Hash":"(.*?)"', html.text) # 正则表达式获取哈希for hash_data in hash_data_lst[:5]: # 遍历哈希get_musci(hash_data) # 调用获取音乐函数
接着就可以直接进行遍历输出,并进行音乐的下载,这里还是以下载5首歌曲进行演示
for hash_data in hash_data_lst[:5]: # 遍历哈希get_musci(hash_data) # 调用获取音乐函数
5. 全部代码
import requests # 导入网络请求模块
import time # 导入时间模块
import math # 导入数学模块
import re # 导入正则表达式模块
import os # 导入系统模块
import json # 导入json模块
from bs4 import BeautifulSoup # 导入解析模块def get_musci(hash_data): # 定义获取音乐函数url = 'https://wwwXXXp' # 提取urldata = {'r': 'play/getdata','callback': 'XXX' + str(math.floor(time.time()*1000)),'hash': str(hash_data)} # 反爬虫参数设置dic_headers = {'cookie':'XXXX','User-Agent': 'XXX','Referer': 'https://wwXXX/'} # 定制请求头html = requests.get(url, params=data, headers=dic_headers) # get请求,获取网页内容#print(html.text) # 转换为文本输出start = html.text.index('{') # 从'{'开始截取end = html.text.index('})') + 1 # 以'})'结束json_data = json.loads(html.text[start:end]) # 转换python数据格式#print(json_data) # 输出数据song_name = json_data['data']['song_name'] # 歌曲名song_author = json_data['data']['author_name'] # 作家song_url = json_data['data']['play_url'] # 歌曲链接name = song_name + '-' + song_author # 名字print(song_url) # 输出歌曲链接print(name) # 输出名字download_music(song_url, name) # 调用音乐下载函数def download_music(url,name): # 定义音乐下载print('正在下载音乐......') # 打印提示语with open(f'{name}.mp3','wb') as f: # 打开文件f.write(requests.get(url).content) # 写入内容print('音乐下载完毕') # 打印提示语def get_hash_data(): # 定义获取哈希函数url = 'https://www.XXXl' # 提取urlhtml = requests.get(url) # get请求,获取网页内容soup = BeautifulSoup(html.text,'lxml') # 解析网页内容hash_datas_a = soup.select('#songs li a') # 定位到哈希所在标签for hash_data_a in hash_datas_a[:5]: # 遍历哈希所在的标签hash_data = hash_data_a['data'].split('|')[0] # 提取哈希#print(hash_datas_a)#print(hash_data)get_musci(hash_data) # 调用获取音乐函数def get_hash_data1(): # 定义另一种获取哈希函数方式url = 'https://www.XXXl' # 提取urlhtml = requests.get(url) # get请求,获取网页内容# print(html.text)hash_data_lst = re.findall(r'{"Hash":"(.*?)"', html.text) # 正则表达式获取哈希for hash_data in hash_data_lst[:5]: # 遍历哈希get_musci(hash_data) # 调用获取音乐函数get_hash_data1() # 调用获取哈希函数
学习笔记:网络机器人6.0python爬取多类型音乐步骤详解相关推荐
- 【python实现网络爬虫(14)】python爬取酷狗中多类型音乐步骤详解(附全部源代码)
目标网址:酷狗音乐-赤伶,页面如下 爬虫逻辑: [找到要获取特定音乐的url]>>>[找到该资源链接的url]>>>[封装获取音乐的函数]>>>[ ...
- ESL3.5 学习笔记(主成分回归,偏最小二乘回归步骤详解)
3.5 运用派生输入方向的方法 这是一篇有关<统计学习基础>,原书名The Elements of Statistical Learning的学习笔记,该书学习难度较高,有很棒的学者将其翻 ...
- python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...
学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...
- Python爬虫教程-Python爬取股票数据过程详解
这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...
- python爬取喜马拉雅_Python爬虫实战案例之爬取喜马拉雅音频数据详解
这篇文章我们来讲一下在网站建设中,Python爬虫实战案例之爬取喜马拉雅音频数据详解.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前言 喜马拉雅是专业的音频分享平台,汇集 ...
- JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
- python爬取app中的音频_Python爬取喜马拉雅音频数据详解
码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...
- Python爬虫之爬取淘女郎照片示例详解
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...
- Python3 爬虫学习笔记 C03 【Ajax 数据爬取】
Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...
最新文章
- 【转】创建SVN仓库的步骤
- 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
- 跳转到页面后加载一个请求的方法
- 黑马程序员_Java学习日记 num1
- python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...
- 再厉害的魔术也比不上真正的redux
- 信息学奥赛一本通(1219:马走日)
- 本地部署Bootstrap3
- atoi的实现和 字符指针数组
- 深入理解Unity刚体(Rigidbody)、碰撞器(Collider)、触发器(Trigger)
- mysql 分表查询外连接_SQL多表连接查询实例(内连接外连接)
- 极客大学产品经理训练营 用例Use Case 第8课总结
- 大数据真实电商数据仓库全流程开发详解
- 程序员为什么要会用Google谷歌搜索引擎
- 【传智播客郑州】Hibernate Serach 5.9全文检索快速入门
- 如何将PDF文件或图片或网页中的公式变为可编辑的--mathpix快速输入公式
- WPS文字 JSA 学习笔记 - 批量设置表格
- GridSearchCV实例:对Xgboost回归任务进行网格调参
- 2020蓝天杯论文评比系统_获奖通报 | 铜山区在江苏省第十四届(2020年)“蓝天杯”中小学优秀教学设计评选中荣获佳绩...
- dns辅助服务器的配置时,主dns配置的区域文件不能复制过来,使用bind部署DNS主从服务器...