喜马拉雅是国内出名的音频网站,里面分为付费和免费的音频,小编这里教大家无需登录下载非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音频下载相关推荐

  1. JS下载喜马拉雅非付费音频

    JS下载喜马拉雅非付费音频 目录 JS下载喜马拉雅非付费音频 1 Demo"成品"及GitHub地址 2 数据分析 3 JS下载文件流 4 搜索列表,下载音频 5 总结 昨天分析了 ...

  2. Java爬取喜马拉雅非付费音频

    Java爬取喜马拉雅非付费音频 目录 Java爬取喜马拉雅非付费音频 前言 1 打开喜马拉雅网站并搜索一个节目 2 研究其数据来源,获取分页数据 3 获取列表信息 4 获取音频下载地址 5 核心代码 ...

  3. python爬虫--王者荣耀高清壁纸下载(多线程)

    下面的代码是采用多线程的生产者消费者模式,下载速度比之前文章的普通下载快一点. 普通下载的链接:python爬虫–王者荣耀高清壁纸下载 代码在下载方面是没有问题的,可以直接运行,就是在收集打不开链接的 ...

  4. python爬虫实战-爬取视频网站下载视频至本地(selenium)

    #python爬虫实战-爬取视频网站下载视频至本地(selenium) import requests from lxml import etree import json from selenium ...

  5. python 爬虫 贪婪算法和非贪婪算法 match()

    python 爬虫 贪婪算法和非贪婪算法 ** 贪婪算法 (.*):贪婪,就是尽可能匹配多的,一般情况下尽可能多的匹配. 非贪婪(.*?),非贪婪,与贪婪相反,尽可能少的匹配. ** 可能内容有些晦涩 ...

  6. python爬虫之喜马拉雅音频数据获取

    学习,是一个长期的过程.学习的方式也是有很多种的,在家里时间有空闲时间的话可以选择读书,如今在手机上看电子书也方便.最近看电子书比较多,感觉自己的视力明显下降了.停下来不学习又不行,我想到用听的方式去 ...

  7. python 喜马拉雅_【Python爬虫】喜马拉雅FM听书,陶冶情操,走向成功!-音频爬取,仅提供思路。...

    [Python] 纯文本查看 复制代码# -*- coding : 'UTF-8' -*- # 喜马拉雅FM听书下载 # Author :XSX # https://www.ximalaya.com/ ...

  8. img绝对路径图片显示_使用python爬虫去风景图片网站批量下载图片

    使用python爬虫(requests,BeautifulSoup)去风景图片网站批量下载图片 1.写代码背景: 今天闲来无事,想弄点图片放到电脑,方便以后使用,故去百度查找一些风景图片网站,发现图片 ...

  9. python爬虫爬取网易云音乐下载_Python爬虫实践-网易云音乐!没有版权又如何!照样爬取!...

    1.前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写 ...

  10. 如何将喜马拉雅FM的音频下载下来保存

    喜马拉雅FM是一款老少皆宜的手机影音视听应用,在我们收听到好听的音频时,希望将它保存下载,以便在没有网络连接的时候也能够回味.那么下面就来说说喜马拉雅FM怎么保存音频. 首先,大家打开喜马拉雅FM,然 ...

最新文章

  1. 工作中常用的linux命令,工作中常用的Linux命令
  2. 软件易容术-----换肤
  3. codeblocks中文编码问题
  4. python SMTP attachment
  5. 只用几行代码,我让模型『训练』加速了3倍以上!
  6. C++类的定义要注意最后的分号不要丢了
  7. IDEA快捷键的使用
  8. 诺基亚手机: 诺基亚N9将在下月19日开卖 售价4400元
  9. 互联网医疗智能客服平台有什么优势
  10. WPF界面设计的方法
  11. mysql中ai是什么意思_MySQL explain用法
  12. 批量进行数字变下标的处理
  13. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
  14. select SCM type and URL 用m2e插件从svn导出maven项目
  15. 九鼎Study210嵌入式开发板刷机笔记
  16. KALI中Arping的使用方法(2023)
  17. 天源财富:XING Mobility与嘉实多合作 为EV提供先进的浸没式冷却电池系统
  18. 【LeetCode】计数质数 [M](素数筛选)
  19. J-Link JTAG/SWD接口
  20. Map集合测试含答案

热门文章

  1. linux64位版本 小米球内网穿透后台启动 centos8 安装 screen 报错:No match for argument: screen
  2. 基于BP神经网络和ORL库的人脸识别matlab仿真
  3. live2d_Live2D 看板娘 (WordPress)
  4. php 如何生成txt文件,PHP生成TXT文件
  5. android 下载服务器的txt文档
  6. java file 权限_Java文件权限(设置)
  7. 数学系之必备参考书+数学系教材推荐
  8. 发电机机房设计规范_柴油发电机的容量选择,以及柴油发电机机房设计规范要求!...
  9. 字典制作、在线密码破解
  10. 爱普生R230打印机清零