私は渡されたウェブサイトのリンクをクロールするスパイダーを持っています。別のデータセットでその実行が終了したら、同じスパイダーを再開したい。もう一度同じクローラを再起動するには?ウェブサイトはデータベースを通過します。すべてのWebサイトがクロールされるまで無制限のループでクローラを実行したい。現在、私は常にクローラscrapy crawl first
を起動する必要があります。クローラを一度起動する方法はありますか?すべてのWebサイトがクロールされると停止しますか?同じスパイダーをプログラムで呼び出す
私は同じことを検索し、クローズ/完了したクローラを処理するソリューションを見つけました。しかし、スパイダーをプログラムでclosed_handler
メソッドと呼ぶ方法はわかりません。
次は私のコードです:
class MySpider(CrawlSpider):
def __init__(self, *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
SignalManager(dispatcher.Any).connect(
self.closed_handler, signal=signals.spider_closed)
def closed_handler(self, spider):
reactor.stop()
settings = Settings()
crawler = Crawler(settings)
crawler.signals.connect(spider.spider_closing, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(MySpider())
crawler.start()
reactor.run()
# code for getting the websites from the database
name = "first"
def parse_url(self, response):
...
私はエラーを取得しています:
Error caught on signal handler: <bound method ?.closed_handler of <MySpider 'first' at 0x40f8c70>>
Traceback (most recent call last):
File "c:\python27\lib\site-packages\twisted\internet\defer.py", line 150, in maybeDeferred
result = f(*args, **kw)
File "c:\python27\lib\site-packages\scrapy\xlib\pydispatch\robustapply.py", line 57, in robustApply
return receiver(*arguments, **named)
File "G:\Scrapy\web_link_crawler\web_link_crawler\spiders\first.py", line 72, in closed_handler
crawler = Crawler(settings)
File "c:\python27\lib\site-packages\scrapy\crawler.py", line 32, in __init__
self.spidercls.update_settings(self.settings)
AttributeError: 'Settings' object has no attribute 'update_settings'
が、これはこれを成し遂げるための正しい方法ですか?それとも他の方法がありますか?助けてください!
は
[Scrapyドキュメントには複数のスパイダーをスクリプトで実行するセクションがあります](http://doc.scrapy.org/en/latest/topics/practices.html#running-multiple-spiders-in-the-same-プロセス)、そして最後に、スパイダーを連続的に走らせる方法の例があります_ _ "遅れを連鎖させてスパイダーを連続的に走らせる" _ –