python爬虫之喜马拉雅非vip音频下载
喜马拉雅是国内出名的音频网站,里面分为付费和免费的音频,小编这里教大家无需登录下载非vip音频,付费的小编还没有达到这个水平,主要是学习破解喜马拉雅xm-sign加密字段的方法
我们还是用老方法,先找接口,随便点击一个音频找到它加载的url,复制红圈里的内容,进行全局搜索
搜索后,找到一个新的URL,并且这个url的id就是网址中的最后一串数字,这个方法和kuwo音乐是一致的
并且我们在这个URL中的response选项卡中,可以找到最开始的url地址,说明音频的地址来源于
https://www.ximalaya.com/revision/play/v1/audio?id=324390263&ptype=1, 这个就是接口。根据经验更改这个id就可以链接到不同的音频
喜马拉雅不同的是,它有一个xm-sign加密字段,按照以往的话,如果我们直接访问这个URL,会得到一个字典形式的json数据,可以提取出来键为src的值,但是对于喜马拉雅不行,大家可以试试
访问结果如上图,得不到数据,这是因为我们在请求这个网页的时候,缺少xm-sign,需要把它加载请求头headers中去,再加上UA伪装,就可以了
接下来我们分析这个xm-sign
也就是生成这个东西,它的生成涉及到md5算法,时间戳(服务器时间戳和真实时间戳)和随机数,md5是一种加密的不可逆算法,需要在pycharm中安装第三方模块hashlib,根据小编查阅的资料以及咨询一些大神,这个xm-sign是由md5(himalaya-服务器时间戳)+100内随机数 +服务器时间戳 + 100内随机数 + 真实时间戳 组成
服务器时间戳由request 网址 https://www.ximalaya.com/revision/time 获得
随机数引入random
生成xm-sign的代码为
url = 'https://www.ximalaya.com/revision/time'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
server_time = response.text
real_time = str(round(time.time()*1000))
xm_sign = str(hashlib.md5("himalaya-{}".format(server_time).encode()).hexdigest()) + "({})".format(str(round(random.random()*100))) + server_time + "({})".format(str(round(random.random()*100))) + real_time
print('此次请求的反爬xm-sign为{}'.format(xm_sign))
另外知乎上一位大神也分析了这个东西,写的比我好,大家也可以学习一下
https://zhuanlan.zhihu.com/p/217949786
将此xm-sign加入请求头后,就可以对URL进行访问了
此时访问的结果为
如果不加这个字段,是请求不到数据的,此时就简单了,按照字典格式的数据提取方法,就可以对src进行提取
用request对src的值进行访问保存即可
整个过程共使用的三次request,第一次是访问服务器时间戳,第二次是用来访问接口,第三次是访问音频。只有第二次需要加xm-sign,其余两次不需要
下面附上整个代码,运行时将网址输入即可例如https://www.ximalaya.com/xiangsheng/40601966/324390263,注意只能是喜马拉雅非vip 的音频,本文实际用处不大,可以学习用
import time
import hashlib
import random
import requests
input_url = input('请输入喜马拉雅网址:')
media_id = input_url.split('/')[-1].strip(' ')
print('歌曲id号为{}'.format(media_id))
print('正在生成反爬的xm-sign...')
url = 'https://www.ximalaya.com/revision/time'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
server_time = response.text
real_time = str(round(time.time()*1000))
xm_sign = str(hashlib.md5("himalaya-{}".format(server_time).encode()).hexdigest()) + "({})".format(str(round(random.random()*100))) + server_time + "({})".format(str(round(random.random()*100))) + real_time
print('此次请求的反爬xm-sign为{}'.format(xm_sign))
new_headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36','xm-sign':xm_sign
}
media_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(media_id)
media_response = requests.get(url=media_url,headers=new_headers)
print(media_response.text)
print('请求音频网络地址为:')
print(media_response.json()['data']['src'])
media_url_listen = media_response.json()['data']['src']
print('正在下载')
media_response_listen = requests.get(url=media_url_listen,headers=headers)
with open(r'D:\喜马拉雅\{}.mp3'.format(media_id),'wb') as f:f.write(media_response_listen.content)
print('完成')
附上效果视频
QQ录屏20210630123033
python爬虫之喜马拉雅非vip音频下载相关推荐
- JS下载喜马拉雅非付费音频
JS下载喜马拉雅非付费音频 目录 JS下载喜马拉雅非付费音频 1 Demo"成品"及GitHub地址 2 数据分析 3 JS下载文件流 4 搜索列表,下载音频 5 总结 昨天分析了 ...
- Java爬取喜马拉雅非付费音频
Java爬取喜马拉雅非付费音频 目录 Java爬取喜马拉雅非付费音频 前言 1 打开喜马拉雅网站并搜索一个节目 2 研究其数据来源,获取分页数据 3 获取列表信息 4 获取音频下载地址 5 核心代码 ...
- python爬虫--王者荣耀高清壁纸下载(多线程)
下面的代码是采用多线程的生产者消费者模式,下载速度比之前文章的普通下载快一点. 普通下载的链接:python爬虫–王者荣耀高清壁纸下载 代码在下载方面是没有问题的,可以直接运行,就是在收集打不开链接的 ...
- python爬虫实战-爬取视频网站下载视频至本地(selenium)
#python爬虫实战-爬取视频网站下载视频至本地(selenium) import requests from lxml import etree import json from selenium ...
- python 爬虫 贪婪算法和非贪婪算法 match()
python 爬虫 贪婪算法和非贪婪算法 ** 贪婪算法 (.*):贪婪,就是尽可能匹配多的,一般情况下尽可能多的匹配. 非贪婪(.*?),非贪婪,与贪婪相反,尽可能少的匹配. ** 可能内容有些晦涩 ...
- python爬虫之喜马拉雅音频数据获取
学习,是一个长期的过程.学习的方式也是有很多种的,在家里时间有空闲时间的话可以选择读书,如今在手机上看电子书也方便.最近看电子书比较多,感觉自己的视力明显下降了.停下来不学习又不行,我想到用听的方式去 ...
- python 喜马拉雅_【Python爬虫】喜马拉雅FM听书,陶冶情操,走向成功!-音频爬取,仅提供思路。...
[Python] 纯文本查看 复制代码# -*- coding : 'UTF-8' -*- # 喜马拉雅FM听书下载 # Author :XSX # https://www.ximalaya.com/ ...
- img绝对路径图片显示_使用python爬虫去风景图片网站批量下载图片
使用python爬虫(requests,BeautifulSoup)去风景图片网站批量下载图片 1.写代码背景: 今天闲来无事,想弄点图片放到电脑,方便以后使用,故去百度查找一些风景图片网站,发现图片 ...
- python爬虫爬取网易云音乐下载_Python爬虫实践-网易云音乐!没有版权又如何!照样爬取!...
1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...
- 如何将喜马拉雅FM的音频下载下来保存
喜马拉雅FM是一款老少皆宜的手机影音视听应用,在我们收听到好听的音频时,希望将它保存下载,以便在没有网络连接的时候也能够回味.那么下面就来说说喜马拉雅FM怎么保存音频. 首先,大家打开喜马拉雅FM,然 ...
最新文章
- 工作中常用的linux命令,工作中常用的Linux命令
- 软件易容术-----换肤
- codeblocks中文编码问题
- python SMTP attachment
- 只用几行代码,我让模型『训练』加速了3倍以上!
- C++类的定义要注意最后的分号不要丢了
- IDEA快捷键的使用
- 诺基亚手机: 诺基亚N9将在下月19日开卖 售价4400元
- 互联网医疗智能客服平台有什么优势
- WPF界面设计的方法
- mysql中ai是什么意思_MySQL explain用法
- 批量进行数字变下标的处理
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
- select SCM type and URL 用m2e插件从svn导出maven项目
- 九鼎Study210嵌入式开发板刷机笔记
- KALI中Arping的使用方法(2023)
- 天源财富:XING Mobility与嘉实多合作 为EV提供先进的浸没式冷却电池系统
- 【LeetCode】计数质数 [M](素数筛选)
- J-Link JTAG/SWD接口
- Map集合测试含答案
热门文章
- linux64位版本 小米球内网穿透后台启动 centos8 安装 screen 报错:No match for argument: screen
- 基于BP神经网络和ORL库的人脸识别matlab仿真
- live2d_Live2D 看板娘 (WordPress)
- php 如何生成txt文件,PHP生成TXT文件
- android 下载服务器的txt文档
- java file 权限_Java文件权限(设置)
- 数学系之必备参考书+数学系教材推荐
- 发电机机房设计规范_柴油发电机的容量选择,以及柴油发电机机房设计规范要求!...
- 字典制作、在线密码破解
- 爱普生R230打印机清零