经常网上瞎逛,总是会遇到各种各样的网站。“偶然间”看到了一个无广告且有着大量妹子写真图片的网站,浏览了一会忍不住拿起卫生纸…擦了擦电脑屏幕。
作为开发且热爱爬数据的码农来说,这个网站简直不要太赞。粗略看了下整个网站,发现类型众多,类型下的套图更是甚多,图片约有数几十万张。还等什么,爬他!倾尽硬盘的爬他!!!
经过审查多个页面,了解了整个网站的架构。画了下面的脑图。
爬取思路就是获取类型页(所有类型)–>某单个类型–某单类型下的多套图(分页)–多套图下多张图(分页),对于这种很多层且很多页数的网站唯有一层一层的扒下去,分页的循环的读取。
有了思路写起代码还是很快的,下面看看第一版没用到多线程的代码,没用到多线程,图片得一张一张的下载,一张下载完了才能接着下载另一张,网站响应的也慢(网站流量做了限制?),导致下载一张图片也很慢。
1 | from saveDB import conndb |
下面是初步学习了多线程知识改造的。献丑献丑,改造后,图片都是一整页的同时下载,速度瞬间提升8倍,为什么是8倍呢?因为网站一页就展示8张图片。
1 | import requests |
最后看看爬取下来的战绩吧。经过一夜的爬取,已经保存了近20G,十好几万张图片。。。
基本就是这样吧,代码还是很简单的,没啥好说的,都有注释。主要的技术点就是其中的那两块多进程、多线程的地方。