如何更好地扩展Scrapy?
- 运行一个
scrapy
进程并增加CONCURRENT_REQUESTS
内部设置。 - 运行多个
scrapy
进程,但仍然专注于增加内部设置。 - 通过增加一定数量的
scrapy
进程来提高效率,同时保持内部设置不变。
如果选择第三种方法,则最好使用哪种软件启动多个Scrapy进程?
分布式多台服务器上部署scrapy
的最佳方式是什么?
如何更好地扩展Scrapy?
scrapy
进程并增加CONCURRENT_REQUESTS
内部设置。scrapy
进程,但仍然专注于增加内部设置。scrapy
进程来提高效率,同时保持内部设置不变。如果选择第三种方法,则最好使用哪种软件启动多个Scrapy进程?
分布式多台服务器上部署scrapy
的最佳方式是什么?
Scrapyd是管理Scrapy进程的好工具。但最好的答案是它取决于情况。首先需要确定瓶颈在哪里。
如果是CPU密集型解析,则应使用多个进程。Scrapy能够通过Twisted对Reactor模式的实现并行处理数千个请求。但它只使用一个进程,没有多线程,因此只会利用单个核心。
如果仅限制速度的是请求数量,则调整并发请求。测试您的Internet速度。测试您有多少带宽然后,转到系统监视器中的网络资源,运行您的Spider,并查看与您的最大值相比使用了多少带宽。增加并发请求数,直到不再看到性能提高为止。停止点可以由站点容量确定,尽管仅适用于小型站点,网站反扒/DDoS程序(假设您没有代理或VPN),您的带宽还是系统中的另一个瓶颈。
最后要知道的是,虽然请求以异步方式处理,但项目不是。如果有很多文本并且全部写入本地,它将在写入时阻塞请求。您将在系统监视器网络面板上看到间歇期。您可以调整并发项目,也许可以获得更平滑的网络使用情况,但仍需要相同的时间。如果使用db写入,请考虑延迟插入或具有阈值的执行多个队列,或两者兼而有之。 这里是一个管道,有人编写了异步处理所有数据库写入的方法。
最后一个瓶颈可能是内存。我在AWS微实例上遇到了这个问题,尽管在笔记本电脑上,这可能不是问题。如果您不需要它们,请考虑禁用缓存,Cookie和重复过滤器。当然,它们可能非常有用。并发项目和请求也会占用内存。
Scrapyd
是专门用于部署和运行Scrapy爬虫的工具。基本上,它是一个守护进程,监听运行爬虫的请求。Scrapyd
可以在多个进程中运行爬虫,您可以使用max_proc
和max-proc-per-cpu
设置来控制其行为:
max_proc
同时运行的Scrapy进程的最大数量。如果未设置或为0,则将使用系统中可用CPU的数量乘以max_proc_per_cpu选项的值。默认为0。
max_proc_per_cpu
每个CPU同时启动的Scrapy进程的最大数量。默认为4。
它有一个不错的JSON API,并提供了一种方便的部署Scrapy项目到scrapyd的方式。
还可以参见:
另一个选择是使用其他服务,例如Scrapy Cloud
:
Scrapy Cloud将高效的Scrapy开发环境与强大的生产环境桥接在一起,用于部署和运行您的爬取。它就像Scrapy的Heroku,尽管其他技术将在不久的将来得到支持。它运行在Scrapinghub平台之上,这意味着您的项目可以根据需要按比例扩展。