05-性能
7.2.2 性能
第10章将会详细介绍关于性能的设置,这里仅作为一个小结。性能设置可以让我们根据特定的工作负载调整Scrapy的性能特性。 CONCURRENT_REQUESTS 用于设置同时执行的最大请求数。大多数情况下,该设置用于防止在爬取不同网站(域名/IP)时超出服务器出站容量。除此之外,还可以找到更加严格的 CONCURRENT_REQUESTS_PER_DOMAIN 以及 CONCURRENT_REQUESTS_PER_IP 。这两个设置分别通过限制同时对每个域名或 IP 地址发出的请求数,达到保护远程服务器的效果。当 CONCURRENT_REQUESTS_PER_IP 为非零值时, CONCURRENT_REQUESTS_PER_DOMAIN 就会被忽略。这些设置不是以秒为单位的。如果 CONCURRENT_REQUESTS = 16 ,而请求平均花费1/4秒的话,你的限制就是每秒16/0.25 = 64个请求。 CONCURRENT_ITEMS 用于设置对每个响应同时处理的最大item数量。你可能会发现该设置并没有它看起来那么实用,因为很多情况下,每个页面或请求中只有一个 Item 。并且,其默认值100也比较随意。如果减小该值,比如减小到10或者1,你甚至可能会看到性能提升,这取决于每个请求的Item数量,以及管道的复杂程度。还需要注意的是,由于该值是每个请求时的数量,如果限制了 CONCURRENT_REQUESTS = 16 、 CONCURRENT_ITEMS = 100 ,那么可能意味着会有1600个item同时在尝试写入数据库。一般来说,建议将该值设置得更保守一些。
对于下载, DOWNLOAD_TIMEOUT 决定了下载器在取消一个请求之前需要等待的时间,其默认值为180秒,这似乎有些偏高(当并发请求数为16时,这意味着站点下载的速度大约为5页/分钟)。建议降低该值,比如当存在超时问题时,将其降低为10秒。默认情况下,Scrapy将两次下载间的延迟设置为0,以最大化抓取速度。可以使用 DOWNLOAD_DELAY 设置将其修改为更加保守的下载速度。有些网站会将请求频率作为“机器人”行为的测量指标。通过设置 DOWNLOAD_DELAY ,还会在下载延迟中启用一个±50%的随机偏移量。可以通过将 RANDOMIZE_DOWNLOAD_DELAY 设置为 False 来禁用该功能。
最后,为了更快的DNS查找,Scrapy默认使用了 DNSCACHE_ENABLED 设置,启用了内存中的DNS缓存。