【发布时间】:2016-02-14 21:47:22
【问题描述】:
我在启动同一个蜘蛛的多个实例时卡住了。我想像 1 个蜘蛛实例的 1 个 url 一样运行它。我必须处理 50k 网址,为此我需要为每个网址启动单独的实例。在我的主要蜘蛛脚本中,我设置了 7 分钟的封闭式超时,以确保我不会长时间爬行。请看下面的代码:
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
import urlparse
for start_url in all_urls:
domain = urlparse.urlparse(start_url).netloc
if domain.startswith('ww'):
domain = domain.split(".",1)[1]
process = CrawlerProcess(get_project_settings())
process.crawl('textextractor', start_url=start_url,allowed_domains=domain)
process.start()
它完全为第一个 url 运行,之后当第二个 url 被传递时,它会给出以下错误:
raise error.ReactorNotRestartable()
ReactorNotRestartable
请建议我应该怎么做才能让它为同一个蜘蛛的多个实例运行。另外,我正在考虑使用线程一次启动多个scrapy实例。这会是一个很好的方法吗?
【问题讨论】:
-
这件事有什么更新吗?
-
你是怎么解决的——面临类似的问题。我用 CrawlerRunner 遍历了我所有的 url,但结果不符合预期。一些 url 被抓取,另一些被限制抓取,而另一些则根本不被抓取。当我只用一个蜘蛛单独运行每个 url 时,结果符合预期。它让我发疯!
标签: python web-scraping scrapy scrapy-spider