scrapy设置问题

一, 并发

    并发性是并行处理的请求数。 存在全局限制和每个域限制。Scrapy中默认的全局并发限制不适合并行爬行许多不同的域,因此您需要增加它。 增加多少将取决于您的爬虫有多少CPU可用。 一个好的起点是100,但找出最好的方法是通过做一些试验并确定Scrapy过程在哪些并发情况下使CPU受到限制。 为了获得最佳性能,您应该选择CPU使用率为80-90%的并发性。

要增加全局并发使用:

CONCURRENT_REQUESTS = 100

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

    目前,Scrapy以使用线程池的阻塞方式进行DNS解析。 在并发级别较高的情况下,爬网速度可能会很慢,甚至会导致DNS解析器超时失败。 增加处理DNS查询的线程数的可能解决方案。 DNS队列的处理速度将更快,加快建立连接和整体爬行。

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

REACTOR_THREADPOOL_MAXSIZE = 20

三, 设置你自己的DNS

    如果您有多个爬网流程和单个中央DNS,它可能会像DNS服务器上的DoS攻击一样,从而导致整个网络变慢甚至阻塞您的计算机。 为了避免这种情况,您可以使用本地缓存设置您自己的DNS服务器,并将其上传到OpenDNS或Verizon等大型DNS。

四, 降低日志等级

    在进行广泛的抓取时,您通常只对抓取的抓取率和发现的任何错误感兴趣。 Scrapy在使用INFO日志级别时报告这些统计信息。 为了节省CPU(以及日志存储需求),在预生成大量广泛爬网时,不应使用DEBUG日志级别。 在开发(广泛)爬虫程序时使用DEBUG级别可能没问题。

设置日志级别使用:

LOG_LEVEL = 'INFO'

五, 禁用cookies

    

除非你真的需要,否则禁用cookies。 进行广泛抓取时通常不需要Cookie(搜索引擎抓取工具忽略它们),它们通过节省一些CPU周期并减少Scrapy抓取工具的内存占用量来提高性能。

要禁用Cookie,请使用:

COOKIES_ENABLED = False

六, 禁用重试

    重试失败的HTTP请求可能会显着减慢抓取速度,尤其是当站点导致响应非常缓慢(或失败)时,这会导致超时错误,导致多次重试,从而不必要地阻止爬网程序的容量重用于其他域。

要禁用重试,请使用:

RETRY_ENABLED = False

七,减少下载超时

    除非您从非常慢的连接抓取(对于大量抓取,这不应该是这种情况),请减少下载超时,以便快速丢弃停滞的请求并释放处理下一个请求的容量。

要减少下载超时使用:

DOWNLOAD_TIMEOUT = 15

八, 禁止重定向

    考虑禁用重定向,除非您有兴趣follow它们。 在进行广泛抓取时,通常会保存重定向并在之后的抓取中重新访问网站以解决它们。 这也有助于保持每个爬取批次的请求数量不变,否则重定向循环可能会导致爬虫对某个特定域上的资源投入过多。

要禁用重定向,请使用:

REDIRECT_ENABLED = False

九, 启用“Ajax可抓取页面”的抓取    

  1. by using #! in URL - this is the default way;
  2. by using a special meta tag - this way is used on “main”, “index” website pages.

Scrapy handles (1) automatically; to handle (2) enable AjaxCrawlMiddleware:

AJAXCRAWL_ENABLED = True




猜你喜欢

转载自blog.csdn.net/pythonisnotshell/article/details/80539854