目标网址:音乐-谁伴我闯荡
爬虫逻辑:
【找到要获取特定音乐的url】>>>【找到该资源链接的url】>>>【封装获取音乐的函数】>>>【封装下载音乐的函数】
注意:
这两个获取url的顺序是和之前获取url的过程是反过来的,以往是获取外部页面的url后进入内部页面的url,然后再获取该页面的信息。

但是下载音乐(定向爬取数据),首先是要确定获取音乐的url(通过浏览器输入后点击可以直接播放–内部页面数据),然后再找其上一层的url(资源链接的url–外部页面数据)

  1. 网页结构分析
    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爬取多类型音乐步骤详解相关推荐

  1. 【python实现网络爬虫(14)】python爬取酷狗中多类型音乐步骤详解(附全部源代码)

    目标网址:酷狗音乐-赤伶,页面如下 爬虫逻辑: [找到要获取特定音乐的url]>>>[找到该资源链接的url]>>>[封装获取音乐的函数]>>>[ ...

  2. ESL3.5 学习笔记(主成分回归,偏最小二乘回归步骤详解)

    3.5 运用派生输入方向的方法 这是一篇有关<统计学习基础>,原书名The Elements of Statistical Learning的学习笔记,该书学习难度较高,有很棒的学者将其翻 ...

  3. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

  4. Python爬虫教程-Python爬取股票数据过程详解

    这篇文章主要介绍了基于Python爬取股票数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本环境配置 python 3.6 pycha ...

  5. python爬取喜马拉雅_Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章我们来讲一下在网站建设中,Python爬虫实战案例之爬取喜马拉雅音频数据详解.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前言 喜马拉雅是专业的音频分享平台,汇集 ...

  6. JDBC学习笔记01【JDBC快速入门、JDBC各个类详解、JDBC之CRUD练习】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  7. python爬取app中的音频_Python爬取喜马拉雅音频数据详解

    码农公社  210.net.cn  210是何含义?10月24日是程序员节,1024 =210.210既 210 之意. Python爬取喜马拉雅音频数据详解 一.项目目标 爬取喜马拉雅音频数据 受害 ...

  8. Python爬虫之爬取淘女郎照片示例详解

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...

  9. Python3 爬虫学习笔记 C03 【Ajax 数据爬取】

    Python3 爬虫学习笔记第三章 -- [Ajax 数据爬取] 文章目录 [3.1]Ajax 简介 [3.2]解析真实地址提取 [3.1]Ajax 简介 Ajax - Asynchronous Ja ...

最新文章

  1. 【转】创建SVN仓库的步骤
  2. 嵌入式linux开发课程设计,嵌入式Linux开发课程设计指导书
  3. 跳转到页面后加载一个请求的方法
  4. 黑马程序员_Java学习日记 num1
  5. python数据分析天气预报论文_用python+sklearn(机器学习)实现天气预报数据 模型和使用...
  6. 再厉害的魔术也比不上真正的redux
  7. 信息学奥赛一本通(1219:马走日)
  8. 本地部署Bootstrap3
  9. atoi的实现和 字符指针数组
  10. 深入理解Unity刚体(Rigidbody)、碰撞器(Collider)、触发器(Trigger)
  11. mysql 分表查询外连接_SQL多表连接查询实例(内连接外连接)
  12. 极客大学产品经理训练营 用例Use Case 第8课总结
  13. 大数据真实电商数据仓库全流程开发详解
  14. 程序员为什么要会用Google谷歌搜索引擎
  15. 【传智播客郑州】Hibernate Serach 5.9全文检索快速入门
  16. 如何将PDF文件或图片或网页中的公式变为可编辑的--mathpix快速输入公式
  17. WPS文字 JSA 学习笔记 - 批量设置表格
  18. GridSearchCV实例:对Xgboost回归任务进行网格调参
  19. 2020蓝天杯论文评比系统_获奖通报 | 铜山区在江苏省第十四届(2020年)“蓝天杯”中小学优秀教学设计评选中荣获佳绩...
  20. dns辅助服务器的配置时,主dns配置的区域文件不能复制过来,使用bind部署DNS主从服务器...

热门文章

  1. 修改本地磁盘和网络磁盘(驱动器)的名字(卷标)
  2. Intel超低功耗CPU的一些信息
  3. 计算机会考咋查成绩,我忘记会考号了 怎么查询成绩
  4. Spark中CheckPoint、Cache、Persist的用法、区别
  5. VBA 自定义Add-in
  6. 什么是金融危机,表现在哪些地方
  7. mysql 微信昵称怎么保存_mysql 微信用户昵称emoji 完整保存
  8. Linux和Unix的区别
  9. 招远西苑学校计算机老师王梅,招远市西苑学校二位教师
  10. 用工单位使用劳动派遣时需注意这几点