gpt4 book ai didi

python - 如何限制scrapy请求对象?

转载 作者:行者123 更新时间:2023-11-28 19:55:29 25 4
gpt4 key购买 nike

所以我有一个蜘蛛,我认为它正在泄漏内存,当我检查 telnet 控制台时,事实证明它只是从链接丰富的页面中获取了太多链接(有时它会放置超过 100,000 个)>>> prefs()

现在我已经一次又一次地浏览文档和谷歌,但我找不到一种方法来限制蜘蛛接受的请求。我想要的是能够告诉它不要接受一次请求一定数量进入调度程序。我试过设置一个 DEPTH_LIMIT,但这只会让它获取大量内容,然后在它获取的内容上运行回调。

这似乎是一件相当简单的事情,我相信人们以前遇到过这个问题,所以我知道一定有办法完成它。有什么想法吗?

编辑:这是 MEMUSAGE_ENABLE = True 的输出

     {'downloader/request_bytes': 105716,
'downloader/request_count': 315,
'downloader/request_method_count/GET': 315,
'downloader/response_bytes': 10066538,
'downloader/response_count': 315,
'downloader/response_status_count/200': 313,
'downloader/response_status_count/301': 1,
'downloader/response_status_count/302': 1,
'dupefilter/filtered': 32444,
'finish_reason': 'memusage_exceeded',
'finish_time': datetime.datetime(2015, 1, 14, 14, 2, 38, 134402),
'item_scraped_count': 312,
'log_count/DEBUG': 946,
'log_count/ERROR': 2,
'log_count/INFO': 9,
'memdebug/gc_garbage_count': 0,
'memdebug/live_refs/EnglishWikiSpider': 1,
'memdebug/live_refs/Request': 70194,
'memusage/limit_notified': 1,
'memusage/limit_reached': 1,
'memusage/max': 422600704,
'memusage/startup': 34791424,
'offsite/domains': 316,
'offsite/filtered': 18172,
'request_depth_max': 3,
'response_received_count': 313,
'scheduler/dequeued': 315,
'scheduler/dequeued/memory': 315,
'scheduler/enqueued': 70508,
'scheduler/enqueued/memory': 70508,
'start_time': datetime.datetime(2015, 1, 14, 14, 1, 31, 988254)}

最佳答案

我解决了我的问题,答案真的很难找到,所以我把它贴在这里以防其他人遇到同样的问题。

在筛选 scrapy 代码并引用文档后,我可以看到 scrapy 将所有请求保存在内存中,我已经推断出这一点,但在代码中也有一些检查以查看是否有作业目录将挂起的请求写入磁盘(在 core.scheduler 中)

因此,如果您使用作业目录运行 scrapy 蜘蛛,它会将挂起的请求写入磁盘,然后从磁盘中检索它们,而不是将它们全部存储在内存中。

$ scrapy crawl spider -s JOBDIR=somedirname

当我执行此操作时,如果我进入 telnet 控制台,我可以看到我在内存中的请求数始终约为 25,并且我有 100,000+ 写入磁盘,这正是我希望它运行的方式。

这似乎是一个常见问题,因为要抓取一个大型网站,每个页面都有多个可提取链接。我很惊讶它没有更多的记录或更容易找到。

http://doc.scrapy.org/en/latest/topics/jobs.html那里的 scrapy 站点声明主要目的是暂停和稍后恢复,但它也以这种方式工作。

关于python - 如何限制scrapy请求对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com