999宝藏网

 找回密码
 

QQ登录

只需一步,快速开始

  • 32阅读
  • 4回复

[[Windows]] 听余庆年??听小说电视剧书等下载

[复制链接]

10

主题

11

帖子

48

积分

宝藏幼稚园

Rank: 2

帖子
11
金币
37
威望
0
积分
48
股份
0
热心值
0
宝藏币
0

最佳新人

发表于 2020-1-12 12:38:00 | 显示全部楼层 |阅读模式

提早祝大师小年欢畅吧!本文所用的网址为:www.tingchina.com
                    
[color=]为上班忙里偷闲的人预备


这是一个有声小说打包下载、在线收听、评书、鬼故事、郭德纲相声、笑话等百万有声资本的网站,至今已有十多年,音频资本很是丰富。

在线听限制少一些,可是下载音频到当地就不太行。需要会员,并消耗积分。


喜好听音频的兄弟们,可以想法子把网站里的资本下载到当地,放在手机里听,上班摸鱼在电脑上听,就很爽。
明天就给大师分享一个用Python批量下载音频的法子。感激@天空宫阙@老殁
具体不会的地方私聊。
03Py思绪首先,放上源代码:
[Asm] 纯文本检察 复制代码import requests
from bs4 import BeautifulSoup
import re
from tqdm import tqdm
import time
import os

class TingChina():
    def __init__(self,id,strat_num):
        self.base_url = 'https://www.tingchina.com'
        self.id = id
        self.num = int(strat_num)-1
        self.name_num = int(strat_num)
        self.Referer = ''
        self.host1 = "http://t44.tingchina.com"
        self.host2 = "http://t33.tingchina.com"
        self.book_name = ''
     
    def get_total_episode(self):
        url ='https://www.tingchina.com/yousheng/disp_{}.htm'.format(str(self.id))
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
        }
        response = requests.get(url,headers=headers)
        if response.status_code==200:
            response.encoding='gbk'
            soup = BeautifulSoup(response.text,'lxml')
            ul = soup.select('div.list > ul')[0]
            lis = ul.select('li')
            name = soup.select('body > div.wrap03.clearfix > div:nth-child(5) > div.main03 > div:nth-child(2) > div.book01 > ul > li:nth-child(1) > span > strong')[0].string
            return name,len(lis)-3
            

    def get_flash_url(self):
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
            }
        url = 'https://www.tingchina.com/yousheng/{}/play_{}_{}.htm'.format(str(self.id),str(self.id),str(self.num))
        response = requests.get(url,headers=headers)
        if response.status_code==200:
            response.encoding='gbk'
            soup = BeautifulSoup(response.text,'lxml')
            src = soup.select('#playmedia')[0]['src']
            self.Referer = url
            # print(src)
            # https://www.tingchina.com/play/yousheng/flash.asp?id=30391&inum=2&flei=都会言情&bookname=江湖光阴&filename=002_大闯我哥.mp3&rand=16&nexturl=play_30391_2.htm
            pattern_params = 'id=(\d+)&inum=(\d+)&flei=(.*?)&bookname=(.*?)&filename=(.*?)&'
            match_params = re.search(pattern_params,src)
            if match_params:
                info = {
                    'id':match_params.group(1),
                    'inum':match_params.group(2),
                    'flei':match_params.group(3),
                    'bookname':match_params.group(4),
                    'filename':match_params.group(5)
                }
                # print(info)
                real_address = self.host1+'/yousheng/{}/{}/{}'.format(info['flei'],info['bookname'],info['filename'])
                # print(real_address)
            return src,url,real_address
     
    def get_audio(self):
        '''get key 和 real_address拼接获得可以拜候的地址'''
        temp_url,Referer,real_address =self.get_flash_url()
        # url = 'https://www.tingchina.com/play/yousheng/flash.asp?id={}&inum={}'.format(str(self.id),str(self.name_num))
        url = self.base_url + temp_url
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
            'Referer': Referer
        }
        response = requests.get(url,headers=headers)
        if response.status_code==200:
            # print(response.apparent_encoding)
            response.encoding='utf-8'
            matched = re.search('url\[3\]= ".*?(key=.*?)";',response.text,re.S)
            if matched:
                # print(matched.group(1))
                return(real_address+'?'+matched.group(1))
     
    def download(self):
        url = self.get_audio()
        print(url)
        if url:
            downloadFILE(url,os.path.join(self.book_name,str(self.name_num).zfill(4)+'.mp3'),self.Referer)

    def run(self):
        name,total_episode = self.get_total_episode()
        print('书名:',name,'集数:',total_episode)
        self.book_name = name
        if not os.path.exists(name):
            os.makedirs(name)
        while True:
            try:
                if self.name_num > total_episode:
                    print('已经下载完成','all assignments done!')
                    break
                self.download()
            except Exception as e:
                print(e)
                with open('log.txt','a',encoding='utf-8') as f:
                    f.write(str(self.name_num)+str(e)+'\n')
            self.num+=1
            self.name_num+=1
         

def downloadFILE(url,name,Referer):
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
        'Referer': Referer
    }
    resp = requests.get(url=url,stream=True,headers=headers)
    content_size = int(int(resp.headers['Content-Length'])/1024)
    with open(name, "wb") as f:
        print("Pkg total size is:",content_size,'k,start...')
        for data in tqdm(iterable=resp.iter_content(1024),total=content_size,unit='k',desc=name):
            f.write(data)
        print(name , "download finished!")

if __name__ == "__main__":
    print('例如:20459 1','下载id为20459的有声书从第1集起头下载')
    id,start_num = input('请输入id和肇端下载集数用空格离隔').split(' ')
    if id and start_num:
        # t = TingChina(有声书id,肇端下载集,如1时从第一集起头下载)
        t = TingChina(int(id),int(start_num))
        t.run()
    else:
        print('请输入正确的id和肇端下载集数用空格离隔')
然后,我们简单来看看实现进程。
1.总的思绪是从flash播放的接口中获得音频的实在地址https://www.tingchina.com/play/yousheng/flash.asp?id=30255&inum=958...


url1或url2和url3拼接就是实在地址。
2.猜测由于网站编码为GBK,经过这个接口授入参数为中文时返回的url3中有乱码。
因而从这个接口仅获得key值,其他的参数自行拼接
real_address = self.host1+'/yousheng/{}/{}/{}'.format(info['flei'],info['bookname'],info['filename'])real_address+key即为可以拜候的音频地址
3.尝试利用python的类来写,代码能够稍微有点乱。
04
利用方式
这里讲一下制品文件的利用方式。
1.自己打包好以后,翻开exe文件。


2.间接输入音频id和肇端的下载集数,中心用空格离隔比如,输入:302371暗示下载id为30237的音频,从第一集起头下载。


那若何看音频id呢?点击某一个音频后,看域名地址,以下图,30237就是这个音频的id。




3.输入后,巧回车键,即可起头下载。音频的下载位置就在此法式的同一级目录下,自动建立文件夹。

4.下载后的音频以下,时候长度没有任何题目,很完整。


05
结语
[color=]希望大师新年欢畅,多多发家,多多热情支持下
,不会的地方也可以鄙人面批评区留言,这个网站的音频资本很丰富想听什么音频可以来这里找,可是不保举在网站上在线收听,广告太多,交互很不友爱。制品下载链接
旅客,假如您要检察本帖隐藏内容请答复

且下载受限制,需要开通会员所以才有了本文。感激技术佛@老殁

免费评分

参与人数 1金币 +5 收起 理由
老顽童 + 5 发帖辛苦,谢谢分享!

查看全部评分

1.发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;微笑

2.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;微笑

3.如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【金币】加分不会扣除自己的积分,做一个热心并受欢迎的人!微笑

回复

使用道具 举报

32

主题

3544

帖子

6197

积分

宝藏博士后

Rank: 12Rank: 12Rank: 12

帖子
3544
金币
2651
威望
1
积分
6197
股份
0
热心值
1
宝藏币
0
发表于 2020-1-13 07:12:04 | 显示全部楼层

谢楼主提供!

1.发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;微笑

2.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;微笑

3.如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【金币】加分不会扣除自己的积分,做一个热心并受欢迎的人!微笑

回复 支持 反对

使用道具 举报

0

主题

412

帖子

694

积分

宝藏中专生

Rank: 6Rank: 6

帖子
412
金币
282
威望
0
积分
694
股份
0
热心值
0
宝藏币
0
发表于 2020-1-13 09:32:59 | 显示全部楼层
发帖辛苦,谢谢分享!

1.发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;微笑

2.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;微笑

3.如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【金币】加分不会扣除自己的积分,做一个热心并受欢迎的人!微笑

回复 支持 反对

使用道具 举报

13

主题

2410

帖子

5573

积分

宝藏博士后

Rank: 12Rank: 12Rank: 12

帖子
2410
金币
3163
威望
0
积分
5573
股份
0
热心值
0
宝藏币
0
发表于 2020-1-13 10:14:50 | 显示全部楼层
一个用Python批量下载音频的办法

1.发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;微笑

2.如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;微笑

3.如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【金币】加分不会扣除自己的积分,做一个热心并受欢迎的人!微笑

回复 支持 反对

使用道具 举报

212

主题

3476

帖子

9990

积分

总版主

Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30Rank: 30

帖子
3476
金币
6489
威望
0
积分
9990
股份
43
热心值
56
宝藏币
0

最佳新人新人进步宝藏新人进步勋章活跃会员音乐之星宝藏元老宝藏护航勋章终身成就总版主优秀斑竹区域管理管理员

发表于 2020-1-13 11:36:36 | 显示全部楼层
发帖辛苦,谢谢分享!
善良是心理养身的营养素,宽容是心理养身的调节阀,乐观是心理养身的不老丹,淡泊是心理养身的免疫剂。
回复 支持 反对

使用道具 举报

快速回复
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

返回列表

|999宝藏网|sitemap|手机版|举报|申请友情链接|  

免责声明:

拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表999宝藏网立场!

999宝藏网论坛所发布的一切破解软件和补丁、注册机以及注册信息,仅限用于学习和研究目的。不得将上述内容用于商业或者非法途径!否则,一切后果请用户自负!

我们不生产软件,我们只是互联网上的搬运工,本站信息来自互联网,版权争议与本站无关,如果您喜欢该程序,请购买注册正版软件,获得正版优质服务!

请重视此声明,法律不容忽视!请支持正版,尊重版权!本站如有信息侵犯了您的权益,请联系:www@rin99.com及时删除!

Powered by Discuz! © 2001-2020 Comsenz Inc. (豫ICP备16009175号) 备案图标 豫公网安备41142602000006号

Copyright © 2016-2020 999宝藏网 版权所有 All Rights Reserved.

GMT+8, 2020-1-23 21:19 , Processed in 0.231458 second(s), 31 queries , Redis On.

快速回复 返回顶部 返回列表