目标网站:静听网

网站url:http://www.audio699.com/

目标文件:所有在线听的音频文件

附:我有个喜好就是听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但是禁ip很严重,就拿静听网来说,你听一个在线音频,不能一个没听完就点击下一集,甚至不能快进太快,否则直接禁你5分钟才能再听,真的是太太讨厌了...

于是我就想用爬虫给它爬下来存储本地就nice了.

我把我的大概分析步骤分享出来.

步骤1:

我查看静听网网页url有一个规律,基网址是http://www.audio699.com/book/,每本书对于一个唯一标识,比如 《借种》 这本书的url如下:(唯一标识1276)

步骤2:

分析html源码:我发现这个网站的每本书的每一集的url就是再上述url后添加集数,并且网页html中包含了音频文件的src如下:

到这里我有点奇怪,这个网站封ip这么严,为什么src会直接放在静态网页中暴露如此明显,我尝试着随便复制一个src,使用python下载这个文件,嗯,瞬间就下载好了,我心想python还真不错,然而当我播放下载好的m4a文件时,发现只有5s,里面传来熟悉的声音"您访问过快,请5分钟后刷新网页重新访问",,,我心想果然没那么简单。。。

然后我重新打开网页获取刚才那个src发现src的值竟然变了,我经过测试发现这个src几乎时时刻刻都在变化,且毫无规律.

哼,想到这里我其实反倒松了口气,只要我用代码实时获取src并且开始下载应该就能解决这个问题吧,于是我测试了一下我的想法

果不其然,这样的确可以下载成功,但是这样一个一个下载速度太慢,一本有声书可是有好几百集音频文件,一集一集下不现实,于是我便用了多线程和多进程下载,

编写好python代码后,测试发现刚开始还行,但下了不到10个音频后出现错误,403 forbidden,503 service unaviable,意思是远程计算机拒绝我的计算机访问网页,文件传输服务不可用,就是这一系列的错误,就是禁了我的ip

我最开始本来想到要不要构建个ip代理池,我心想我的不同进程访问的网页url都不相同,应该没有什么大问题,哎,看来不能偷懒啊,于是我又到西刺高匿代理网站爬取了一些代理ip,我还专门写了一个筛选脚本,筛选能够成功获取目标网页html的ip,改写代码后,再次尝试,发现虽然没有再出现403等错误,但是下载成功率低的惊人,开30个线程,200个代理ip,等了半小时回来看,

tmd,才下好5,6个文件,很多文件只有十几k,看着贼烦,哎,看来这免费ip质量还是不行,存活时间太短,于是我只好到大象代理网站买了ip(一天9元好贵),然后经过

筛选再次爬取,这次一共爬200个音频,等了半个小时运行结束,发现大概下载成功了170个文件,其他文件要么直接0k,要么残缺不全,,,

为此我又写了一个脚本,专门用于下载文件夹中下载失败的文件,这次我采用多进程方式下载,写完后运行,等了一会,发现程序运行差不多了,但没运行结束,我直接结束运行,发现原来的30个残缺文件只有极少数几个还没下载成功,我筛选ip再运行脚本,这次很快就下好了,看来筛选出ip很重要,

接下来我又改进了脚本的一些地方,多线程,多进程个写了一个,配合着下载能够完全将几百集的音频文件全部下载

2019/6/4日追加:其实静听网src获取容易然而下载真的不容易,ip不够用,现在静听网ip封的更加严,也许站长发现有人大量爬取网站音频,新添了反扒手段,现在买的代理ip都不管用了,不想说了,都是伤心...

......................................三个月后..............................

2019/9/21日追加:目前已解决以上所有问题,亲测不需购买代理也能达到比较好的下载效果。博主写了一个命令行可执行文件(仅windows10可使用)

分享网盘链接:

1.19.9版本(第1版):链接:https://pan.baidu.com/s/1fZDcIgeiyR_AfMTQJbvbOQ
提取码:4qsl 

2.19.11版本(第2版):链接:https://pan.baidu.com/s/175iLEzb9Vo5FhF1NNijkDg
提取码:v0y5

第2版本新增功能:(1)支持零散集数批量下载功能;

                            (2)支持用户指定代理IP文件路径(可以避开筛选代理的步骤,直接进入第二步【step 2】下载有声书阶段);

....................................N个月后..................................

最新文章

  1. 原创:CSS3技术-雪碧图自适应缩放与精灵动画方案
  2. 关于Interception框架
  3. tp框架之Model类与命名空间
  4. [转载]HDU 3478 判断奇环
  5. PMI列子1
  6. Android 分享一个SharedPreferences的工具类,方便保存数据
  7. C语言 复杂的栈(链表栈)
  8. ANTLR4权威参考手册
  9. Unity3d 开发之 ulua 坑的总结
  10. 终端管理软件tmux
  11. Web Api 2.0中使用Swagger生成Api文档的2个小Tips
  12. 实例分析Vue.js中 computed和methods不同机制
  13. 使用newtonsoft序列化
  14. php循环删除checkbox
  15. react基础
  16. mysql计算排名 转
  17. Oracle EBS供应商接口导入(转)
  18. hexo安装总结
  19. Maven创建Web项目、、、整合SSM框架
  20. go语言基础之函数有多个返回值

热门文章

  1. 猎鹰9火箭(Falcon 9)
  2. java虚拟机05(Java虚拟机的参数)
  3. 2019年第十届蓝桥杯【C++省赛B组】
  4. Combobox出现System.Data.DataRowView的原因
  5. platform设备驱动框架
  6. LeetCode141 环形链表(Java—HashSet简单应用or双指针)
  7. 数据结构——KMP(串)
  8. c++输出哈夫曼编码
  9. 二十三、SAP中内表的修改
  10. VUE- 异步等待方法嵌套