笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

宽爬行

发布者: 笨鸟自学网



增加并发性

Concurrency是并行处理的请求数。存在全局限制 (CONCURRENT_REQUESTS )以及每个域都可以设置的附加限制 (CONCURRENT_REQUESTS_PER_DOMAIN )或每IP (CONCURRENT_REQUESTS_PER_IP 

注解

调度程序优先级队列 recommended for broad crawls 不支持 CONCURRENT_REQUESTS_PER_IP .

scrapy中的默认全局并发限制不适用于并行地对许多不同的域进行爬网,因此您需要增加它。增加多少将取决于您的爬虫有多少CPU和内存可用。

一个好的起点是 100 ::

CONCURRENT_REQUESTS = 100

但最好的方法是做一些试验,并确定零碎的进程在什么样的并发上受到CPU限制。为了获得最佳性能,您应该选择CPU使用率为80-90%的并发性。

增加并发性也会增加内存使用量。如果担心内存使用问题,您可能需要相应地降低全局并发限制。

增加Twisted IO线程池的最大大小

目前scrapy使用线程池以阻塞方式进行DNS解析。如果并发性级别更高,则爬行速度可能会变慢,甚至无法达到DNS解析程序超时。增加处理DNS查询的线程数的可能解决方案。将更快地处理DNS队列,从而加快建立连接和整体爬行。

要增加最大线程池大小,请使用:

REACTOR_THREADPOOL_MAXSIZE = 20

设置您自己的DNS

如果您有多个爬行进程和单个中心DNS,它会像DOS攻击DNS服务器一样,导致整个网络速度减慢,甚至阻塞您的机器。要避免这种情况,请使用本地缓存设置您自己的DNS服务器,并向某些大型DNS(如OpenDNS或Verizon)上游设置。

降低日志级别

当进行广泛的爬行时,你通常只对你得到的爬行率和发现的任何错误感兴趣。当使用 INFO 日志级别。为了保存CPU(和日志存储要求),不应使用 DEBUG 在生产中进行大型宽爬行时的原木水平。使用 DEBUG 不过,在开发(广泛的)爬虫时,级别可能很好。

要设置日志级别,请使用:

LOG_LEVEL = 'INFO' 

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-11-23 16:26 , Processed in 0.029530 second(s), 17 queries .

© 2001-2020

返回顶部