【发布时间】:2013-01-12 19:19:08
【问题描述】:
我正在尝试使用scrapy 抓取网站列表。我试图将网站 url 列表设置为 start_urls,但后来我发现我买不起这么多内存。有什么办法可以设置scrapy一次抓取一两个网站吗?
【问题讨论】:
标签: python screen-scraping web-crawler scrapy
我正在尝试使用scrapy 抓取网站列表。我试图将网站 url 列表设置为 start_urls,但后来我发现我买不起这么多内存。有什么办法可以设置scrapy一次抓取一两个网站吗?
【问题讨论】:
标签: python screen-scraping web-crawler scrapy
您可以尝试使用concurrent_requests = 1,以免数据过载
http://doc.scrapy.org/en/latest/topics/settings.html#concurrent-requests
【讨论】:
您可以定义一个start_requests 方法,该方法遍历对您的 URL 的请求。这应该避免一次将所有起始 URL 保存在内存中的开销,并且是解决您描述的问题的最简单方法。
如果在抓取过程中,scrapy 仍然需要在内存中保存大量 URL,您可以enable persistence support。
如果你真的想一次只喂几个 URL,这可以通过注册 spider_idle 信号并在你的回调函数中添加接下来的几个 URL 并引发 DontCloseSpider 来实现。
【讨论】: