欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python爬取喜马拉雅音频数据

程序员文章站 2022-05-04 16:40:13
...
'''
思路:
请求和响应的过程
多层数据解析
海量音频数据保存
https://aod.cos.tx.xmcdn.com/storages/1c5f-audiofreehighqps/DB/A3/CKwRINsEdDahACUM2wCrMC1H.m4a
https://www.ximalaya.com/revision/play/v1/audio?id=415166844&ptype=1
id值哪来的
https://www.ximalaya.com/youshengshu/4256765/

案例分析
在静态页面中找音频每一个对应的ID值
根据id值替换请求每一个音频数据json字符串
从json数据中解析音频的url地址,请求音频数据
'''

import requests #导入模块
import parsel #数据解析的模块


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36'
}
for page in range(1,6):
    print('==========正在下载第{}页数据=========='.format(page))
    url='https://www.ximalaya.com/youshengshu/3210/p{}/'.format(page)
    print(url)
    response=requests.get(url=url,headers=headers)
    html_data=response.text
    selector=parsel.Selector(html_data) #转换数据类型
    lis=selector.xpath('//div[@class="sound-list _is"]/ul/li')
    for li in lis:
        title=li.xpath('.//a/@title').get()
        href = li.xpath('.//a/@href').get()
        print(title,href)

        #解析id
        m4a_id=href.split('/')[-1]

        #2 根据id值替换请求
        json_url='https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id)
        data_json=requests.get(url=json_url,headers=headers).json()

        #解析音频的url
        m4a_url=data_json['data']['src']
        #print(m4a_url)

        #请求音频数据
        m4a_data=requests.get(url=m4a_url,headers=headers).content
        with open('video\\'+str(page)+title+'.m4a',mode='wb') as f:
            f.write(m4a_data)
            print('保存完成: ',str(page)+title)




 

相关标签: Python