日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python爬蟲(chóng)入門(mén)教程(十四):爬取有聲小說(shuō)網(wǎng)站數(shù)據(jù)

 小世界的野孩子 2021-05-06

前言

本文的文字及圖片來(lái)源于網(wǎng)絡(luò),僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,如有問(wèn)題請(qǐng)及時(shí)聯(lián)系我們以作處理。

Python爬蟲(chóng)、數(shù)據(jù)分析、網(wǎng)站開(kāi)發(fā)等案例教程視頻免費(fèi)在線(xiàn)觀(guān)看

https://space.bilibili.com/523606542

前文內(nèi)容

Python爬蟲(chóng)新手入門(mén)教學(xué)(一):爬取豆瓣電影排行信息

Python爬蟲(chóng)新手入門(mén)教學(xué)(二):爬取小說(shuō)

Python爬蟲(chóng)新手入門(mén)教學(xué)(三):爬取鏈家二手房數(shù)據(jù)

Python爬蟲(chóng)新手入門(mén)教學(xué)(四):爬取前程無(wú)憂(yōu)招聘信息

Python爬蟲(chóng)新手入門(mén)教學(xué)(五):爬取B站視頻彈幕

Python爬蟲(chóng)新手入門(mén)教學(xué)(六):制作詞云圖

Python爬蟲(chóng)新手入門(mén)教學(xué)(七):爬取騰訊視頻彈幕

Python爬蟲(chóng)新手入門(mén)教學(xué)(八):爬取論壇文章保存成PDF

Python爬蟲(chóng)新手入門(mén)教學(xué)(九):多線(xiàn)程爬蟲(chóng)案例講解

Python爬蟲(chóng)新手入門(mén)教學(xué)(十):爬取彼岸4K超清壁紙

Python爬蟲(chóng)新手入門(mén)教學(xué)(十一):最近王者榮耀皮膚爬取

Python爬蟲(chóng)新手入門(mén)教學(xué)(十二):英雄聯(lián)盟最新皮膚爬取

Python爬蟲(chóng)新手入門(mén)教學(xué)(十三):爬取高質(zhì)量超清壁紙

基本開(kāi)發(fā)環(huán)境

  • Python 3.6
  • Pycharm

相關(guān)模塊的使用

import requests
import os

 

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

一、明確目標(biāo)

爬取免費(fèi)的播放量最多的有聲書(shū),如果你想要爬取付費(fèi)的也是可以,那你得先開(kāi)一個(gè)會(huì)員,
爬蟲(chóng)是看得到才能爬。

 

二、網(wǎng)頁(yè)數(shù)據(jù)分析

點(diǎn)擊任意一個(gè)音頻章節(jié)點(diǎn)擊播放。在開(kāi)發(fā)者工具中選擇 Media 會(huì)加載出一個(gè)數(shù)據(jù)

 


復(fù)制這個(gè)鏈接會(huì)自動(dòng)下載一個(gè)可播放的音頻文件。

 

 


聽(tīng)內(nèi)容是和網(wǎng)站上面的有聲小說(shuō)是一樣的。所以這個(gè)就是音頻數(shù)據(jù)的真實(shí)url地址。
接下來(lái)就要分析找到這個(gè)數(shù)據(jù)來(lái)源。

 


在開(kāi)發(fā)者工具中搜索 wKgJJ1eKo-3xGS0KAFIc8J_87NE024 框選的內(nèi)容就是音頻本身,所有查看第一個(gè)地址。

 

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

 

這個(gè)數(shù)據(jù)里面包含了音頻地址。

其實(shí)這個(gè) id=18556416 就是每個(gè)音頻的ID值了。同樣的在開(kāi)發(fā)者工具中進(jìn)行搜索。

 


有聲書(shū)名字,音頻ID,章節(jié)名字都有了。但是當(dāng)我查看第二頁(yè)數(shù)據(jù)的時(shí)候發(fā)現(xiàn),并不是這個(gè)鏈接,而是另外一個(gè)鏈接。

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

 

 


還是有一些區(qū)別的,所以我們應(yīng)該請(qǐng)求的是第二個(gè)鏈接

整體思路分析

1、通過(guò) 'https://www.ximalaya.com/revision/album/v1/getTracksList?albumId=4756811&pageNum=2'
url地址獲取每章音頻的ID以及章節(jié)名字
2、通過(guò) 'https://www.ximalaya.com/revision/play/v1/audio?id=18556416&ptype=1' url地址獲取
每章音頻的下載地址
3、請(qǐng)求音頻地址,進(jìn)行本地保存

 

三、代碼實(shí)現(xiàn)

1、獲取獲取每章音頻的ID以及章節(jié)名字

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']
        # 章節(jié)名字
        audio_title = index['title']
        # 有聲書(shū)小說(shuō)名字 《摸金天師》第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)

 

完整實(shí)現(xiàn)代碼

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']
        # 章節(jié)名字
        audio_title = index['title']
        # 有聲書(shū)小說(shuō)名字 《摸金天師》第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)

 

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多