【发布时间】:2016-01-14 23:38:20
【问题描述】:
在那些日子里,我正在用 Python 中的 Scrapy 制作蜘蛛。 它基本上是一个简单的蜘蛛类,可以简单地解析 Html 页面中的某些字段。 我不使用starts_url[] Scrapy 字段,但我使用这样的个性化列表:
class start_urls_mod():
def __init__(self, url, data):
self.url=url
self.data=data
#Defined in the class:
url_to_scrape = []
#Populated in the body in this way
self.url_to_scrape.append(start_urls_mod(url_found), str(data_found))
这样传递url
for any_url in self.url_to_scrape:
yield scrapy.Request(any_url.url, callback=self.parse_page)
它适用于有限数量的 url,如 3000。
但是,如果我尝试进行测试,它会发现大约 32532 url 来抓取。 在 JSON 输出文件中,我发现只抓取了大约 3000 个 url。
我的函数自己回忆:
yield scrapy.Request(any_url.url, callback=self.parse_page)
所以问题是,Scrapy 项目有一些内存限制吗?
【问题讨论】:
-
手册中有一整节关于内存使用限制。问题是在调用随机 url 时,您可能会发现有人托管 1gb 文件..这可能会严重破坏您正在拉动的服务器。你是否开启了内存使用扩展,(见doc.scrapy.org/en/latest/topics/…)
-
@JamesTaylor 所以我需要增加 MEMUSAGE_LIMIT_MB 并设置一个高值以不停止程序?
-
如果你达到了内存限制,Scrapy/Python 会抛出一个异常指示。如果是这样,请确定它为什么使用 35k 的内存请求并没有那么多可以坐在那里(它们并不是那么大)。 Scrapy 持有响应对象或项目的时间不应超过处理它们所需的时间。
-
这能回答你的问题吗? Scrapy Limit Requests For Testing
标签: python python-2.7 class web-crawler scrapy