IntelliJ IDEA教程 api search sdk count reference Amaze UI vue原理 vue下载 vue学习 vue学习教程 后台模板 android项目实例 jq绑定click事件 jq选择子元素 mysql操作日志 linux关闭mysql matlab复数求模 bitlocker加密好慢 ubuntu更改文件夹权限 python数据类型转换 数据库学习 pythonset python文件读取 java的集合框架 java在线课程 java中float javaenum java入门基础 java集合图 java集合框架图 java安装 java网页 php入门例子 exescope教程 ps校正倾斜照片 16进制编辑器 千千静听老版本 god2iso java获取时间戳
当前位置: 首页 > 学习教程  > python

Python爬虫新手入门教学(十四):爬取有声小说网站数据

2021/2/6 22:25:08 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 Python爬虫、数据分析、网站开发等案例教程视频免费在线观看 https://space.bilibili.com/523606542 前文内容 Python爬虫新手入门教学(一&#xff09…

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

Python爬虫、数据分析、网站开发等案例教程视频免费在线观看

https://space.bilibili.com/523606542

前文内容

 

Python爬虫新手入门教学(一):爬取豆瓣电影排行信息

Python爬虫新手入门教学(二):爬取小说

Python爬虫新手入门教学(三):爬取链家二手房数据

Python爬虫新手入门教学(四):爬取前程无忧招聘信息

Python爬虫新手入门教学(五):爬取B站视频弹幕

Python爬虫新手入门教学(六):制作词云图

Python爬虫新手入门教学(七):爬取腾讯视频弹幕

Python爬虫新手入门教学(八):爬取论坛文章保存成PDF

Python爬虫新手入门教学(九):多线程爬虫案例讲解

Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸

Python爬虫新手入门教学(十一):最近王者荣耀皮肤爬取

Python爬虫新手入门教学(十二):英雄联盟最新皮肤爬取

Python爬虫新手入门教学(十三):爬取高质量超清壁纸

基本开发环境

  • Python 3.6
  • Pycharm

相关模块的使用

import requests
import os

安装Python并添加到环境变量,pip安装需要的相关模块即可。

一、明确目标

爬取免费的播放量最多的有声书,如果你想要爬取付费的也是可以,那你得先开一个会员,
爬虫是看得到才能爬。

 

二、网页数据分析

点击任意一个音频章节点击播放。在开发者工具中选择 Media 会加载出一个数据

 


复制这个链接会自动下载一个可播放的音频文件。

 

 


听内容是和网站上面的有声小说是一样的。所以这个就是音频数据的真实url地址。
接下来就要分析找到这个数据来源。

 


在开发者工具中搜索 wKgJJ1eKo-3xGS0KAFIc8J_87NE024 框选的内容就是音频本身,所有查看第一个地址。

 

https://www.ximalaya.com/revision/play/v1/audio?id=18556416&ptype=1

这个数据里面包含了音频地址。

其实这个 id=18556416 就是每个音频的ID值了。同样的在开发者工具中进行搜索。

 


有声书名字,音频ID,章节名字都有了。但是当我查看第二页数据的时候发现,并不是这个链接,而是另外一个链接。

https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=4756811&pageNum=2

 


还是有一些区别的,所以我们应该请求的是第二个链接

整体思路分析

1、通过 'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=4756811&pageNum=2'
url地址获取每章音频的ID以及章节名字
2、通过 'https://www.ximalaya.com/revision/play/v1/audio?id=18556416&ptype=1' url地址获取
每章音频的下载地址
3、请求音频地址,进行本地保存

三、代码实现

1、获取获取每章音频的ID以及章节名字

def get_audio_info(html_url):
    json_data = get_response(html_url).json()
    audio_info = json_data['data']['tracks']
    for index in audio_info:
        # 音频ID
        audio_id = index['trackId']
        # 章节名字
        audio_title = index['title']
        # 有声书小说名字 《摸金天师》第001章 百辟刀
        audio_name = audio_title.split('第')[0]

2、获取音频url

def get_audio_url(audio_id):
    page_url = f'https://www.ximalaya.com/revision/play/v1/audio?id={audio_id}&ptype=1'
    json_data = get_response(page_url).json()
    audio_url = json_data['data']['src']
    return audio_url

3、保存音频

def save(name, title, audio_url):
    path = f'{name}\\'
    if not os.path.exists(path):
        os.makedirs(path)
    audio_content = get_response(audio_url).content
    with open(path + title + '.m4a', mode='wb') as f:
        f.write(audio_content)
        print('正在保存:', title)

完整实现代码

import requests
import os


def get_response(html_url):
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
    }
    response = requests.get(url=html_url, headers=header)
    return response


def save(name, title, audio_url):
    path = f'{name}\\'
    if not os.path.exists(path):
        os.makedirs(path)
    audio_content = get_response(audio_url).content
    with open(path + title + '.m4a', mode='wb') as f:
        f.write(audio_content)
        print('正在保存:', title)


def get_audio_url(audio_id):
    page_url = f'https://www.ximalaya.com/revision/play/v1/audio?id={audio_id}&ptype=1'
    json_data = get_response(page_url).json()
    audio_url = json_data['data']['src']
    return audio_url


def get_audio_info(html_url):
    json_data = get_response(html_url).json()
    audio_info = json_data['data']['tracks']
    for index in audio_info:
        # 音频ID
        audio_id = index['trackId']
        # 章节名字
        audio_title = index['title']
        # 有声书小说名字 《摸金天师》第001章 百辟刀
        audio_name = audio_title.split('第')[0]
        audio_url = get_audio_url(audio_id)
        save(audio_name, audio_title, audio_url)


if __name__ == '__main__':
    for page in range(1, 39):
        url = f'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=4756811&pageNum={page}'
        get_audio_info(url)

 

 


本文链接: http://www.dtmao.cc/news_show_2000079.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?