Python 有没有办法重新启动刮擦式爬虫程序?

Python 有没有办法重新启动刮擦式爬虫程序?,python,scrapy,Python,Scrapy,我想知道是否有一种方法可以重新启动刮擦爬虫。这就是我的代码的样子: from scrapy.spiders import CrawlSpider, Rule from scrapy.linkextractors import LinkExtractor from scrapy.crawler import CrawlerProcess results = set([]) class SitemapCrawler(CrawlSpider): name = "Crawler"

我想知道是否有一种方法可以重新启动刮擦爬虫。这就是我的代码的样子:

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.crawler import CrawlerProcess

results = set([])

class SitemapCrawler(CrawlSpider):

name = "Crawler"
start_urls = ['www.example.com']
allowed_domains = ['www.example.com']
rules = [Rule(LinkExtractor(), callback='parse_links', follow=True)]

def parse_links(self, response):
    href = response.xpath('//a/@href').getall()
    results.add(response.url)
    for link in href:
        results.add(link)

def start():
   process.crawl(Crawler)
   process.start()
   for link in results:
      print(link)
如果我尝试调用
start()
两次,它会运行一次,然后出现以下错误:

raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable

我知道这是一个一般性的问题,所以我不需要任何代码,但我只想知道如何解决这个问题。提前谢谢。

重新启动是什么意思?您想同时运行两个爬虫程序实例,还是在爬虫程序以某种方式停止后重新启动爬虫程序。@ibilgen,我的意思是第一次运行爬虫程序,直到完成,然后第二次再次运行。我建议您使用独立脚本启动爬虫程序,然后你可以按你的意愿启动爬虫。有没有一种方法可以让爬虫在完成爬虫后继续运行。我想做的是:对一个url进行爬网,然后等待添加另一个url,然后对该url进行爬网,依此类推。我不想直接重启它。我用它来做API,你不能只通过一个请求就能做到。您可以通过定期发送请求来检查url更改。对于该更改,请第二次回调
d.addCallback(sleep,seconds=)#第二次回调
@mtabbsi,我发现了一个类似于我的问题:。如果你能回答这个问题,那就太好了。@MeZo检查我的答案谢谢你的解决方案,它很有效。是否有任何可能的方法可以在reactor.run()之后运行代码?
from twisted.internet import reactor
import scrapy
from scrapy.crawler import CrawlerRunner
from scrapy.utils.log import configure_logging
class MySpider(scrapy.Spider):
        #Spider definition
        configure_logging({'LOG_FORMAT': '%(levelname)s: %(message)s'})
        runner = CrawlerRunner()
        d = runner.crawl(MySpider)
        def finished():            
            print("finished :D") 
        d.addCallback(finished)
        reactor.run()