wuse111 发表于 2020-10-15 17:07

python分析并下载听书网免费音频

如题所示,这个网站原本是给别人做单子,但是后面做完卖家跑单了,发出来供大家交流学习一下,网站本身没多大难度。

该文章仅供交流使用,请勿非法使用,如有侵犯,请联系删帖。


一.分析
随便选一本书进去,然后打开f12进行刷新,进行筛选包,定位xhr,doc,发现xhr没有包,doc就有,标红框的就是显示指定类型的包,可以看到有很多重复的包,点开发现是广告和其他内容。
只有第一个带有书id的没有重复的,点进去看。

我们最终是要下面的这些集数的链接,所以结合刚才上一步的那个包进行提取链接,我推荐这里直接用re(正则),当然用其他的也可以

进去通过关键词定位定到下面的图,可以发现有两个不同的提取(如下图所示),第一个前面class带着f,后面则没有class,通过页面对比,可以了解这是区分免费和收费的(这里只提取免费)



点进随便一集的链接进去,点进可以发现很多广告,然后还带着一个播放条,那么这就是音频所在的地方了(很多广告,我就不上页面了),直接抓包,然后进行筛选,点击media,可以发现很多重复的MP4
,就只有一个MP3,还是从集数的链接位置过去,那这个就是音频的链接了,复制链接重新打开网页试一试,发现可以播放。

然后对这个音频链接进行分析,可以发现有时间,一大段不知道从哪来的东西,时间戳,bookid等,已知的参数先不管,先找那未知的参数,直接把筛选定到all,ctrl+f进行搜索参数,可以发现有两个结果。
第一个已知,那就第二个进行分析,可以发现返回的就是我们的MP3链接。


我们再对这个包进行分析,这个包是post提交,不光有url,也有提交的参数,提交的参数可以通过分析发现bookid,付费的章节,现在的章节。

其中在上条post中,会发现有请求头中有一个xt参数,估计是一个验证免费或是付费的,还是按照之前的操作搜索,发现是在章节的网页里可以提取到的。

二.代码
把需要提取的参数进行例举一下:bookid,xt参数,付费章节等
代码中没有放解决报错的代码,这个下面可以自己去加上。
代码写得很简洁,有什么功能可以自己进行添加。
代码如下:
def get_books_link(url):
    import requests
    import re
    #通过字符串的方法提取book_id
    book_id = url.split('/')[-1]
    #设置ua
    headers = {
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0"
    }
    #定义一个默认的ua
    de_headers = headers.copy()
    reps = requests.get(url, headers=headers)
    #提取免费的章节数
    pattern = re.compile(r'<a class="f" href="(.*?)">(.*?)</a>')
    chapter_list = re.findall(pattern, reps.text)
    #进行提取列表最后一条,然后再加一
    pay_chap = str(int(chapter_list) + 1)
    for chapter in chapter_list:
      #补全链接
      chap_url = 'https://ting55.com' + chapter
      chap_num = chapter
      reps = requests.get(chap_url, headers=headers).text
      #提取xt参数
      xt = re.search(re.compile(r'<meta name="_c" content="(.*?)"/>'), reps).group(1)
      #设置post的提交data
      data = {
            'bookId': book_id,
            'isPay': pay_chap,
            'page': chap_num
      }
      #更新请求头协议
      headers.update({"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                        "Referer": chap_url,
                        "X-Requested-With": "XMLHttpRequest",
                        "xt": xt})
      #因为返回内容是json格式,就直接返回json
      reps = requests.post('https://ting55.com/glink', data=data, headers=headers).json()
      #提取MP3链接
      links = reps["url"]
      #访问链接
      reps = requests.get(links, headers=de_headers)
      #按照章节数来保存MP3文件
      with open(f'{chap_num}.mp3', 'wb') as f:
            f.write(reps.content)
            f.close()

if __name__ == '__main__':
    get_books_link('https://ting55.com/book/14917')

wuse111 发表于 2020-10-15 18:04

Mastar_ 发表于 2020-10-15 17:43
提供这种需求的甲方还跑单,是多么没有底线

哈哈哈,说得对,现在市场乱的啊

yzhome 发表于 2020-10-15 17:40

这是干货,谢谢,学习一下

Mastar_ 发表于 2020-10-15 17:43

提供这种需求的甲方还跑单,是多么没有底线

久浅情亦深 发表于 2020-10-15 18:55

好网站啊{:1_899:}

chuanyue1981 发表于 2020-10-19 08:05

小白完全看不懂希望大神能做成软件

arley 发表于 2020-10-19 09:11

不错,有空学习一下

zhuce129 发表于 2020-10-21 16:40

受教了!谢谢。能不能讲讲非免费的参数怎么分析?

lmd717 发表于 2020-10-21 17:39

感谢大佬的分享 有空学习一下

00mega 发表于 2020-10-21 17:42

还跑路。。。
页: [1] 2
查看完整版本: python分析并下载听书网免费音频