小涩席 发表于 2020-3-15 20:50

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

如题,因为笔者想听书,但是又不想安装APP,所以才有了这一段代码。
希望能给大家带来启发,也希望大佬能提出宝贵意见,谢谢!!!
最后声明:本代码仅供技术交流,请勿商用,如有侵权,请告知本人,本人立即删除。

# -*- coding : 'UTF-8' -*-
# 喜马拉雅FM听书下载
# Author :XSX
# https://www.ximalaya.com/jiaoyu/29391994/p1/
# Python 3.8 PyCharm Community Edition 2019.3.3

import requests
from lxml import etree
import os
import time
import json

def Get_ID_Name(url, headers):
    Contents_IDS = []
    r = requests.get(url, headers=headers)
    r.encoding = r.apparent_encoding
    html = etree.HTML(r.text)
    Titles = html.xpath('//div[@class="sound-list _Qp"]/ul/li/div/a/@title')
    Contents_lists = html.xpath('//div[@class="sound-list _Qp"]/ul/li/div/a/@href')
    for Contents_list in Contents_lists:
      links_Cache = str(Contents_list).split('/')[-1]
      JsonURL = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(links_Cache)
      Contents_IDS.append(JsonURL)
    return Titles, Contents_IDS

def Json_Get_links(Contents_IDS, headers):
    Itemlists = []
    n = 0
    for Contents_ID in Contents_IDS:
      contents = {}
      time.sleep(1.5)
      r1 = requests.get(Contents_ID, headers=headers)
      r1.encoding = r1.apparent_encoding
      results = json.loads(r1.text)
      id = results['data']['trackId']
      m4alinks = results['data']['src']
      contents['ID'] = id
      contents['M4aLinks'] = m4alinks
      Itemlists.append(contents)
      n += 1
      print('已采集{}个链接!'.format(n))
    # print(Itemlists)
    return Itemlists

def DownLoadM4A(Itemlists, filename):
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36',
      'If-None-Match': '"llN9ISnSdOkEmb835lC9NQ_j47Kl"',
      'Host': 'fdfs.xmcdn.com',
    }
    if not os.path.exists('./XMLYFM'):
      os.mkdir('./XMLYFM')
    count = 0
    for filename1, Itemlist in zip(filename, Itemlists):
      srclinks = Itemlist['M4aLinks']
      print(srclinks)
      r2 = requests.get(srclinks, headers=headers)
      print(r2.raise_for_status())
      with open('./XMLYFM/' + str(filename1) + '.m4a', 'wb')as f:
            f.write(r2.content)
            count += 1
            print('已下载{}个音频文件!'.format(count))
    print("{}个音频文件已全部下载完成!".format(count))

if __name__ == '__main__':
    print('正在加载...')
    url = 'https://www.ximalaya.com/jiaoyu/29391994/p1/'
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
      'Cookie': '请换上自己的',
      'Referer': 'https://www.ximalaya.com/jiaoyu/29391994/p1/',
      'Host': 'www.ximalaya.com'
    }
    data1 = Get_ID_Name(url, headers)
    IDlinks = data1
    fileName = data1
    DownLoadM4A(Json_Get_links(IDlinks, headers), fileName)

weliong 发表于 2020-4-7 08:36

刚刚接触PYTHON,看到这种实用的程序,来观摩学习一下。

yeh1990118 发表于 2020-4-11 20:38

全新手小白前來參拜學習學習

W13144538163 发表于 2020-4-13 10:00

小白学习学习

hai742477234 发表于 2020-4-27 20:35

水涧无形 发表于 2020-4-28 10:58

刚学完python,真的刚好在提升一下,感谢感谢

flyingfox 发表于 2020-5-17 01:31


小白学习学习

menyhai 发表于 2020-6-5 09:05

刚学PY的小白来学习,谢谢分享

wjdcq 发表于 2020-11-23 10:45

学习一下,谢谢分享

19861800008 发表于 2022-1-4 15:01

小白学习学习
页: [1] 2 3 4 5 6 7 8
查看完整版本: 【Python爬虫】喜马拉雅FM听书,陶冶情操,走向成功!-音频爬取,仅提供思路。