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次。
答案 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()