是否有可能在循环中启动蜘蛛?

时间:2017-04-29 08:03:21

标签: scrapy

while 1:
    url = f.readline()
    if not url:
        break

    _url = 'http://' + url.split()[0]
    _domain = get_domain(_url)
    process = CrawlerProcess(settings)
    process.crawl(mycrwalspider(), su=[_url], ad=[_domain])
    process.start()

以上是我的核心代码,我想在循环中抓取这些网址(太多)。但是当我跑步时,我收到了一个错误:

twisted.internet.error.ReactorNotRestartable

我发现了很多文章,但没有找到合适的方法。我知道反应堆只启动一次,但我想做的是循环启动蜘蛛。 我该怎么办?

我找到了解决方案:

for url in urls:
   # url : [['www.a.com'],['www.b.com'],...]
    p1 = Process(target=run_spiders, args=(success_flag, url,))
    p1.start()
    p1.join()

所以,如果我有1000个网址运行,我每次可以运行100个网址,总计10次。

1 个答案:

答案 0 :(得分:0)

process.start()置于循环之外

while 1:
    url = f.readline()
    if not url:
        break

    _url = 'http://' + url.split()[0]
    _domain = get_domain(_url)
    process = CrawlerProcess(settings)
    process.crawl(mycrwalspider(), su=[_url], ad=[_domain])
process.start()