解决 Scrapy 并发量高时 DNS 超时的问题
当 Scrapy 对不同域名抓取的时候,如果并发量太高,经常会有 DNS 超时的问题。当然,这个是同类型爬虫都有的问题,本文只是在 Scrapy 框架的基础上描述下解决这个问题的过程。
分析 Scrapy DNS 解析过程
当我把 CONCURRENT_REQUESTS
调到 600 的时候,爬虫便出现大量的 DNS 超时错误。Scrapy 虽说总体上是以异步的方式实现的,但是在进行 DNS 解析的时候,使用的是多线程。
我们一般使用类似下面的命令运行爬虫
$ scrapy crawl spider_name
这其实都会用到 cmdline.py 中的 execute 方法
# scrapy/cmdline.py
def execute(argv=None, settings=None):
# ...
cmd.crawler_process = CrawlerProcess(settings)
_run_print_help(parser, _run_command, cmd, args, opts)
sys.exit(cmd.exitcode)