Scrapy并发策略

Gil*_*tes 10 python concurrency scrapy web-scraping

什么是缩放Scrapy的更好方法?

  1. 通过运行一个scrapy进程并增加CONCURRENT_REQUESTS内部Scrapy的设置
  2. 通过运行多个scrapy流程,但仍然专注于增加内部设置.
  3. 通过增加scrapy内部设置的恒定值来增加数量.

如果3 - 那么什么软件更适合用于启动多个scrapy流程?

什么是scrapy跨多个服务器分发的最佳方式?

小智 10

Scrapyd是管理Scrapy流程的绝佳工具.但我能给出的最佳答案是它取决于它.首先,您需要弄清楚瓶颈在哪里.

如果是CPU密集型解析,则应使用多个进程.Scrapy能够通过Twisted实现的Reactor模式并行处理1000个请求.但它只使用一个进程而没有多线程,因此它只使用一个核心.

如果只是限制速度的请求数,则调整并发请求.测试你的网速.要测试您拥有多少带宽然后,请转到系统监视器中的网络资源,运行蜘蛛并查看与最大值相比使用的带宽量.增加并发请求,直到您看到性能提升为止.停止点可以由站点容量确定,但仅限于小站点,站点反刮/ DDoS程序(假设您没有代理或vpns),您的带宽或系统中的另一个阻塞点.最后要知道的是,虽然请求是以异步方式处理的,但项目却不是.如果你有很多文本并在本地写入所有内容,它会在写入时阻止请求.您将在系统监视器网络面板上看到暂停.您可以调整并发项目,并可能获得更平滑的网络使用,但它仍然需要相同的时间.如果您正在使用数据库写入,请考虑插入延迟,或者在阈值之后执行多次的队列,或两者兼而有之.这是一个有人写的处理所有数据库写入异步的管道.最后的阻塞点可能是记忆.我在AWS微型实例上遇到过这个问题,虽然在笔记本电脑上,但这可能不是问题.如果您不需要它们,请考虑禁用缓存,cookie和dupefilter.当然,他们可以非常有帮助.并发项和请求也占用内存.


ale*_*cxe 7

Scrapyd完全是为了部署和运行scrapy蜘蛛.基本上它是一个监听蜘蛛请求的守护进程.Scrapyd在多个进程中运行蜘蛛,您可以使用max_procmax-proc-per-cpu设置控制行为:

max_proc

将启动的最大并发Scrapy进程数.如果未设置或0,它将使用系统中可用的cpus数乘以max_proc_per_cpu选项中的值.默认为0.

max_proc_per_cpu

每个cpu将启动的最大并发Scrapy进程数.默认为4.

它有一个很好的JSON API,并提供了一个方便的方法来部署 scrapy项目scrapyd.

另见:


另一种选择是使用不同的服务,例如Scrapy Cloud:

Scrapy Cloud将高效的Scrapy开发环境与强大的全功能生产环境相结合,以部署和运行您的爬网.它就像一个Heroku for Scrapy,虽然其他技术将在不久的将来得到支持.它运行在Scrapinghub平台之上,这意味着您的项目可以根据需要按需扩展.