记一次不可描述网站的爬取经历
今天闲来无事,想练习一下视频爬取,又不想惹上麻烦。于是在外网找了个“澳门风云赌场,在线荷官发牌”的网站进行练习。(绝不是色心起了,不是!)
寻找目标网站
第一步当然是去外网寻找不可描述的网站了,依稀记得小时候在父辈的电脑里面看到的一些搜索关键词,什么“婷婷五月”之类的,试着去搜了一下,果然找到了网站。
进入网站,打开一个分区的视频,按 F12 打开开发者工具,在 network 中过滤含有 .m3u8 的异步请求,一般的流媒体视频网站都会使用这个协议进行视频流的传输,将视频文件分割成成千上万个 .ts 文件流,根据 .m3u8 后缀的索引文件,下载一个个的 .ts 视频流文件,在浏览器上加载播放。
单线程爬取
一开始使用单线程爬取,先发送请求,下载 index.m3u8 文件,取得 ts 视频流的文件链接索引,一个一个发送请求爬取,并按顺序重命名方便使用批处理命令合并。但无奈速度太慢了。
多线程爬取
通过 threading 库建立多个线程来爬取,借助队列 Queue 为每个线程分配爬取、存储任务。
注意:
start()方法后不能紧接着join()方法,join()方法可以阻塞主线程以等待子线程完成。如果主线程每启动一个子线程都要等待子线程执行完成再启动下一个子线程,那么与单线程无异,一般是:for t in threading_pool: t.start() # ... # other codes # ... for t in threading_pool: t.join()