标签:多线程

python

超级易懂爬虫系列之使用多线程爬取妹纸图

在前面的超级易懂爬虫系列中我们将爬虫的理论知识与实际操作相结合,相信大家都学会了,还没看过的猛戳以下链接 超级易懂爬虫系列之爬虫入门爬取妹子图 超级易懂爬虫系列之爬取妹子图 超级易懂爬虫系列之爬虫简单的架构 为了让大家能够更加容易明白,这个系列采取了先易后难,逐渐扩充其功能的方式进行讲解,在前面也说到过,在爬取妹纸图的过程中会将妹纸图保存到本地,因为这涉及到I/O操作,相对而言是很费时的一种操作,在前面爬取到某一网页的妹纸图时采取的是一个一个保存的方式,也就是说当爬取到了一个网页的时候需要等到将该网页的所有的妹纸图都保存到本地后才可以爬取下一个网页,而将妹纸图保存到本地相对而言算是耗时操作,因此我们想要是能够在爬取到该网页的妹纸图后能够同时保存n个妹纸图该多好,而不是一个一个的保存,这就是多线程的操作,通过开启多个线程来同时执行n个保存妹纸图的操作,从而提高程序的运行效率。在python中多线程是通过thread/threading模块来完成的,其中threading模块功能比thread模块功能更加高级,使用起来也更容易,因此我们以threading模块为例进行讲解。下面我们先来了解下该模块,然后使用多线程将我们前面的爬取妹纸图的程序进行改写,最后来测试下,采用多线程和不采用多线程程序的执行效率之间的差距。 了解了基本理论之后下面我们就来将之前的程序改写为使用线程的方式 [crayon-5f03ac3f40763021172950/] 程序代码注释很详细,相信大家都看得懂,主要就是把原来的保存妹纸图的I/O操作放到一个单独的函数中,然后将其传给Thread类作为参数,这样每一个保存妹纸图的操作就是一个单独的线程操作。 然后测试一下使用多线程和不使用多线程的运行效率各是多少。首先运行我们在超级易懂爬虫系列之爬取全部妹子图中讲解的程序,这个是没使用多线程的,测试结果如下: 然后运行上面的使用多线程的程序,测试结果如下: 可以看到使用多线程明显效率提高了不少,如果I/O操作越密集,这种优势会越明显。   注:本文首次发表于huqi.tech,谢绝转载,如需转载,请注明出处:huqi.tech