爬虫小白爬虫求大佬求解?

1.我理解 爬虫主要的问题在于网络阻塞所以使用多线程弥补HTTP异步等待。
那么使用了gevent解决网络问阻塞题就不需要使用多线程吗?

2.python多线程运行时使用的是单核心,还是多核心在多核心机器上运行如果是单核心,能否同时使用多线程多进程

3.在4核心8线程的电脑上,开启单个进程32线程python运行这些线程是怎麼分配的?

4.当网络阻塞不是瓶颈如何才能最大化使用单台电脑CPU?应该使用多线程还是多进程增大爬取速率

5.使用消息队列分布式爬虫,等待的消息过多会不会存在内存或CPU问题

6.使用消息队列是如何增大爬取速率的?

}

扫码或搜索:进击的Coder

即可立即永玖解锁本站全部文章

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

Hello 大家好!我又来了。

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

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

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

这就涉及到一个东西!这玩意儿叫做队列!!队列!!队列!!其实吧正常来说应该给大家用队列来完成这个教程的 比如 Tornado 的queue模块。(如果需偠更为稳定健壮的队列则请考虑使用Celery这一类的专用消息传递工具)

不过为了简化技术种类啊!(才不会告诉你们是我懒,嫌麻烦呢!)這次我们继续使用MongoDB

好了!先来理一下思路:

每个进程需要知道那些URL爬取过了、哪些URL需要爬取!我们来给每个URL设置两种状态:

诶!等等我們好像忘了啥? 失败的URL的怎么办啊我们在增加一种状态:

嗯!当一个所有初始的URL状态都为outstanding;当开始爬取的时候状态改为:processing;爬取完成状態改为:complete;失败的URL重置状态为:outstanding。为了能够处理URL进程被终止的情况、我们设置一个计时参数当超过这个值时;我们则将状态重置为outstanding。

还囿上一篇博文我们已经使用过的pymongo

'已经存在于队列中了')

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

"""这一段儿就不解释了哦!超级簡单的"""

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

您的支持是博主写作最大的动力如果您喜欢我的文章,感觉我的文章对您有帮助请狠狠點击下面的

更多文章、联系博主、技术交流、商务合作

扫码或搜索:进击的Coder

}

我要回帖

更多关于 小白爬虫 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信