【发布时间】:2017-06-15 11:19:38
【问题描述】:
我已经设置了一个解析 xml 提要的 Scrapy 蜘蛛,处理大约 20,000 条记录。
出于开发目的,我想限制处理的项目数量。通过阅读 Scrapy 文档,我发现我需要使用 CloseSpider 扩展。
我已按照有关如何启用此功能的指南进行操作 - 在我的蜘蛛配置中,我有以下内容:
CLOSESPIDER_ITEMCOUNT = 1
EXTENSIONS = {
'scrapy.extensions.closespider.CloseSpider': 500,
}
但是,我的蜘蛛永远不会终止 - 我知道 CONCURRENT_REQUESTS 设置会影响蜘蛛实际终止的时间(因为它将继续处理每个并发请求),但这仅设置为默认值 16,并且但我的蜘蛛会继续处理所有项目。
我尝试改用CLOSESPIDER_TIMEOUT 设置,但同样没有效果。
这是我运行蜘蛛时的一些调试信息:
2017-06-15 12:14:11 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: myscraper)
2017-06-15 12:14:11 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'myscraper', 'CLOSESPIDER_ITEMCOUNT': 1, 'FEED_URI': 'file:///tmp/myscraper/export.jsonl', 'NEWSPIDER_MODULE': 'myscraper.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['myscraper.spiders'], 'USER_AGENT': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
2017-06-15 12:14:11 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.feedexport.FeedExporter',
'scrapy.extensions.logstats.LogStats',
'scrapy.extensions.closespider.CloseSpider']
2017-06-15 12:14:11 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware',
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2017-06-15 12:14:11 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2017-06-15 12:14:11 [scrapy.middleware] INFO: Enabled item pipelines:
['myscraper.pipelines.MyScraperPipeline']
2017-06-15 12:14:11 [scrapy.core.engine] INFO: Spider opened
可以看出,CloseSpider 扩展和CLOSESPIDER_ITEMCOUNT 设置正在应用中。
任何想法为什么这不起作用?
【问题讨论】:
-
可以使用 CloseSpider Exception 来限制项数,
-
@parik 我也试过这个 - 但我不确定在哪里添加它?我将它添加到我的管道中,但这似乎只是终止了该项目 - 然后它继续对每个项目执行相同的操作。你能举个例子吗?
-
好的,对于您的问题,请添加 CONCURRENT_REQUEST = 1 并让我知道它是否有效
-
@parik - 恐怕我已经试过了。
标签: python python-3.x scrapy scrapy-spider