学习爬取喜马拉雅详细过程

爬取喜马拉雅

  1. 网址喜马拉雅
    在这里插入图片描述
  2. 查看播放音频时的网络请求
    在这里插入图片描述

在这里插入图片描述

如图所示的请求便是音频信息

  1. 寻找音频信息url来源
    在这里插入图片描述
    如图所示便是请求获取音频url的请求网址
    浏览器单独访问会发现:
    在这里插入图片描述

于是添加上xm-sign和user-agent发送请求

在这里插入图片描述

观察url发现带有2个信息id和ptype
在这里插入图片描述
ptype必须要的,id便是音频的ID
到了此刻问题转化为了如何寻找目标音频的ID

  1. 寻找ID
    确认信息位于源码中
    在这里插入图片描述

显然在庞大杂乱无章的源码中去找还是有点麻烦
找啊找,终于找到了调用的api
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这次便明晓了

  1. 代码
    分析完了,直接上源码


'''
开发者:Anxun
时间:2021-07-03 14:03:23
网站:www.clouded.top
请尊重版权,保留此信息
'''
#print('欢迎使用更多访问:www.clouded.top')
import requests,json,os,time,hashlib,random
'''
https://aod.cos.tx.xmcdn.com/storages/10f3-audiofreehighqps/F5/75/CKwRIasEs5uOAEovfwDBpZQg.m4a
https://aod.cos.tx.xmcdn.com/storages/7313-audiofreehighqps/10/12/CKwRIRwEsk6WAEDdTADBJy9m.m4a
https://aod.cos.tx.xmcdn.com/storages/b15b-audiofreehighqps/AB/22/CKwRIasEsPkuAE8v_ADApeoF.m4a
https://aod.cos.tx.xmcdn.com/storages/dca0-audiofreehighqps/E2/68/CKwRIMAEr6ihAEUpKADAJDwE.m4a
'''
headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36"
        }

def get_xm_sign():#破解xm-sign加密
    global headers
    serverTimeUrl = "https://www.ximalaya.com/revision/time"#获取喜马拉雅服务器的时间戳
    response = requests.get(serverTimeUrl,headers = headers)
    serverTime=response.text
    #md5(ximalaya-服务器时间戳)(100以内随机数)服务器时间戳(100以内随机数)现在时间戳
    nowTime = str(round(time.time()*1000))
    sign = str(hashlib.md5("himalaya-{}".format(serverTime).encode()).hexdigest()) + "({})".format(str(round(random.random()*100))) + serverTime + "({})".format(str(round(random.random()*100))) + nowTime
    headers["xm-sign"] = sign# 将xm-sign添加到请求头中
    #print(headers)

def get_url(ID,path):#获取下载链接
	get_xm_sign()#更新sign
	global headers
	
	url='https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(ID)#含有url的json数据
	html=requests.get(url,headers=headers).text
	#print(html)
	html=json.loads(html)#转化为json
	url=html["data"]["src"]
	print(ID,path,url)
	get_aduio(url,path)

def get_aduio(url,path):#下载m4a文件
	music = requests.get(url, headers=headers).content
	with open(path, 'wb') as f:
	        f.write(music)
	print('下载完成')

def get_IDlist(albumId,pageNum):#获取音频列表
	get_xm_sign()#更新sign
	global headers
	url='https://www.ximalaya.com/revision/album/v1/getTracksList?albumId={}&pageNum={}'.format(albumId,pageNum)#组成url获取列表信息
	html=requests.get(url,headers=headers).text
	html=json.loads(html)#转化为json
	info=html["data"]["tracks"]
	title_list=[]#标题列表
	trackId_list=[]#id列表
	for a in info:
		title=a["title"]#获取标题
		trackId=a["trackId"]#获取音频ID
		title_list.append(title)
		trackId_list.append(trackId)
		#print(title,trackId)
	try:
		os.makedirs('./喜马拉雅爬取')#建立存储目录
	except:
		pass

	for path in range(len(title_list)):
		ID=trackId_list[path]#id
		path=title_list[path]
		path='./喜马拉雅爬取/{}.m4a'.format(path)#组成路径
		get_url(ID,path)
albumId=16704269#频道ID
pageNum=1#页数
get_IDlist(albumId,pageNum)
#get_url('417171885','./喜马拉雅爬取/扎心了!yyds有了新含义!.m4a')








另外提一下遇到了xm-sign反爬虫
emm
自己操作参考xm-sign反爬虫破解

要使用Python爬取喜马拉雅的数据,可以使用requests库发送HTTP请求获取数据。首先,你需要使用requests.get()方法发送GET请求到喜马拉雅的API接口,例如: response = requests.get('https://www.ximalaya.com/revision/play/album?albumId=16372952&pageNum=1&sort=-1&pageSize=30') 然后,你可以使用json.loads()方法将返回的数据转换成字典对象,以便于处理和提取其中的信息。例如: data = json.loads(response.text) audio_data = data['data']['tracksAudioPlay'] 这样你就可以获取到喜马拉雅音频数据。接下来,你可以根据需要使用这些音频数据进行相关的分析、存储或其他操作。注意,这里的示例只是一个基本的示范,具体的爬取操作可能需要根据喜马拉雅的API文档和需求进行进一步的定制和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python爬虫|爬取喜马拉雅音频](https://blog.youkuaiyun.com/weixin_34122548/article/details/93600299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Python实例---爬取下载喜马拉雅音频文件](https://blog.youkuaiyun.com/weixin_30701575/article/details/99085866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值