Scrapy:1)什么是限制蜘蛛 2)如何删除老化的请求对象?

Dav*_*ong 5 python scrapy

我知道这在不知道完整代码是什么的情况下本质上是一个很难回答的问题。

下面是代码的摘要:

  • 以许多起始网址开头
  • 将一些数据保存到元数据中
  • 有一个全局字典变量,以当前时间启动
  • 关注共享同一个域的所有链接
  • 用启动时间检查当前时间,当差异太大时不跟随。一些域的链接太多(如何限制scrapy请求对象?

但一般来说,是什么导致请求的曲线如此不平滑?我没有太多的处理,所以我认为他们基本上会在并发请求下发出尽可能多的请求。此外,我已将并发请求数设置为 256,并且每个 IP 的请求数 = 1,因此不应该是因为任何特定网站。另一个有趣的事情是它开始很快,然后变慢。我可以理解,因为缓慢的请求在系统中停留的时间更长,并拉低了平均值。

任何想法都会受到欢迎。

在此处输入图片说明

[scrapy.crawler] Overridden settings: {'AUTOTHROTTLE_ENABLED': True, 'BOT_NAME': 'stack', 'CONCURRENT_REQUESTS': 256, 'CONCURRENT_REQUESTS_PER_DOMAIN': 1, 'CONCURRENT_REQUESTS_PER_IP': 1, 'DEPTH_LIMIT': 3, 'DEPTH_PRIORITY': 1, 'DOWNLOAD_DELAY': 1, 'LOG_ENABLED': False, 'LOG_LEVEL': 'INFO', 'MEMUSAGE_LIMIT_MB': 950, 'NEWSPIDER_MODULE': 'stack.spiders', 'REACTOR_THREADPOOL_MAXSIZE': 30, 'SCHEDULER_DISK_QUEUE': 'scrapy.squeues.PickleFifoDiskQueue', 'SCHEDULER_MEMORY_QUEUE': 'scrapy.squeues.FifoMemoryQueue', 'SPIDER_MODULES': ['stack.spiders'], 'STATS_CLASS': 'sh_scrapy.stats.HubStorageStatsCollector', 'TELNETCONSOLE_HOST': '0.0.0.0',}
Run Code Online (Sandbox Code Playgroud)

更新 我尝试将并发请求设置为 inf,这解决了线性问题,但产生了次要问题。

基于此更新,更明显的是什么限制了蜘蛛?

但是,现在计划的请求比实际请求高出约 20%,导致内存使用量随着程序的继续而增长。有没有办法删除老化的请求对象,以便内存使用量不会随着时间的推移而增长?