给你的Python爬虫穿上风火轮(多进程), 架起筋斗…

2018-08-10 11:26:15来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

image

PS:使用多线程时好像在目录切换的问题上存在问题,可以给线程加个锁试试

Hello 大家好!我又来了。

 
image

你是不是发现下载图片速度特别慢、难以忍受啊!对于这种问题 一般解决办法就是多进程了!一个进程速度慢!我就用十个进程,相当于十个人一起干。速度就会快很多啦!(为什么不说多线程?懂点Python的小伙伴都知道、GIL的存在 导致Python的多线程有点坑啊!)今天就教大家来做一个多进程的爬虫(其实吧、可以用来做一个超简化版的分布式爬虫)

其实吧!还有一种加速的方法叫做“异步”!不过这玩意儿我没怎么整明白就不出来误人子弟了!(因为爬虫大部分时间都是在等待response中!‘异步’则能让程序在等待response的时间去做的其他事情。)

 
image

学过Python基础的同学都知道、在多进程中,进程之间是不能相互通信的,这就有一个很坑爹的问题的出现了!多个进程怎么知道那那些需要爬取、哪些已经被爬取了!

 
image
 
image
 
image
 
image
 
image

首先我们需要一个模块:datetime(这个模块比内置time模块要好使一点)不会装??不是吧!

pip install datetime

下面是队列的代码:

 
image

好了,队列我们做好了,下面是获取所有页面的代码:

 
image

下面就是多进程+多线程的下载代码了:

 
image

好啦!一个多进程多线的爬虫就完成了,(其实你可以设置一下MongoDB,然后调整一下连接配置,在多台机器上跑哦!!嗯,就是超级简化版的分布式爬虫了,虽然很是简陋。)

本来还想下载图片那一块儿加上异步(毕竟下载图片是I\O等待最久的时间了,),可惜异步我也没怎么整明白,就不拿出来贻笑大方了。

另外,各位小哥儿可以参考上面代码,单独处理图片地址试试(就是多个进程直接下载图片)?

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:验证码识别 Tesseract的简单使用和总结

下一篇:走进模块