2016-08-30 6 views
0

このquetionは、私は、クローラが正常に終了したときに、クローラhttp://doc.scrapy.org/en/latest/topics/jobs.htmlクローラが突然停止したときに状態を保持する方法はありますか?

の状態を持続するには、次のリンクは、今これは、割り込みまたはCtrl + Cで、完全に正常に動作続いているScrapy spider does not store state (persistent state)

への参照です。

私はあなたにCtrl + Cを複数回打ったとき

  1. クモが正常にシャットダウンしないことに気づきました。
  2. サーバーの容量が低下しました。再び実行したときに
  3. それは突然

を終了による先の他の理由クモ、クロール最初のURLに自分自身をシャットダウンします。

上記のようなときにクローラの永続状態を達成するにはどうすればよいですか? 原因は、URLの束全体を再度クロールすることになります。クモが再び実行され

ログ:これを行うの

2016-08-30 08:14:11 [scrapy] INFO: Scrapy 1.1.2 started (bot: maxverstappen) 
2016-08-30 08:14:11 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'maxverstappen.spiders', 'SPIDER_MODULES': ['maxverstappen.spiders'], 'ROBOTSTXT_OBEY': True, 'BOT_NAME': 'maxverstappen'} 
2016-08-30 08:14:11 [scrapy] INFO: Enabled extensions: 
['scrapy.extensions.logstats.LogStats', 
'scrapy.extensions.telnet.TelnetConsole', 
'scrapy.extensions.corestats.CoreStats', 
'scrapy.extensions.spiderstate.SpiderState'] 
2016-08-30 08:14:11 [scrapy] INFO: Enabled downloader middlewares: 
['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 
'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 
'scrapy.downloadermiddlewares.retry.RetryMiddleware', 
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 
'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware', 
'scrapy.downloadermiddlewares.stats.DownloaderStats'] 
2016-08-30 08:14:11 [scrapy] INFO: Enabled spider middlewares: 
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 
'scrapy.spidermiddlewares.referer.RefererMiddleware', 
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 
'scrapy.spidermiddlewares.depth.DepthMiddleware'] 
2016-08-30 08:14:12 [scrapy] INFO: Enabled item pipelines: 
['maxverstappen.pipelines.MaxverstappenPipeline'] 
2016-08-30 08:14:12 [scrapy] INFO: Spider opened 
2016-08-30 08:14:12 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2016-08-30 08:14:12 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6024 
2016-08-30 08:14:12 [scrapy] DEBUG: Crawled (200) <GET http://www.inautonews.com/robots.txt> (referer: None) 
2016-08-30 08:14:12 [scrapy] DEBUG: Crawled (200) <GET http://www.thecheckeredflag.com/robots.txt> (referer: None) 
2016-08-30 08:14:12 [scrapy] DEBUG: Crawled (200) <GET http://www.inautonews.com/> (referer: None) 
2016-08-30 08:14:12 [scrapy] DEBUG: Crawled (200) <GET http://www.thecheckeredflag.com/> (referer: None) 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered duplicate request: <GET http://www.inautonews.com/> - no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates) 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.newsnow.co.uk': <GET http://www.newsnow.co.uk/h/Life+&+Style/Motoring> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.americanmuscle.com': <GET http://www.americanmuscle.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.extremeterrain.com': <GET http://www.extremeterrain.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.autoanything.com': <GET http://www.autoanything.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.bmwcoop.com': <GET http://www.bmwcoop.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.automotorblog.com': <GET http://www.automotorblog.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'twitter.com': <GET https://twitter.com/inautonews> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.facebook.com': <GET https://www.facebook.com/inautonews> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'plus.google.com': <GET https://plus.google.com/+Inautonewsplus> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.histats.com': <GET http://www.histats.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.hamiltonf1site.com': <GET http://www.hamiltonf1site.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.joshwellsracing.com': <GET http://www.joshwellsracing.com/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.jensonbuttonfan.net': <GET http://www.jensonbuttonfan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.fernandoalonsofan.net': <GET http://www.fernandoalonsofan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.markwebberfan.net': <GET http://www.markwebberfan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.felipemassafan.net': <GET http://www.felipemassafan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.nicorosbergfan.net': <GET http://www.nicorosbergfan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.nickheidfeldfan.net': <GET http://www.nickheidfeldfan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.lewishamiltonblog.net': <GET http://www.lewishamiltonblog.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.timoglockfan.net': <GET http://www.timoglockfan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.jarnotrullifan.net': <GET http://www.jarnotrullifan.net/> 
2016-08-30 08:14:12 [scrapy] DEBUG: Filtered offsite request to 'www.brunosennafan.net': <GET http://www.brunosennafan.net/> 
2016-08-30 08:14:12 [scrapy] INFO: Closing spider (finished) 
2016-08-30 08:14:12 [scrapy] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 896, 
'downloader/request_count': 4, 
'downloader/request_method_count/GET': 4, 
'downloader/response_bytes': 35353, 
'downloader/response_count': 4, 
'downloader/response_status_count/200': 4, 
'dupefilter/filtered': 149, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2016, 8, 30, 8, 14, 12, 724932), 
'log_count/DEBUG': 28, 
'log_count/INFO': 7, 
'offsite/domains': 22, 
'offsite/filtered': 23, 
'request_depth_max': 1, 
'response_received_count': 4, 
'scheduler/dequeued': 2, 
'scheduler/dequeued/disk': 2, 
'scheduler/enqueued': 2, 
'scheduler/enqueued/disk': 2, 
'start_time': datetime.datetime(2016, 8, 30, 8, 14, 12, 13456)} 
2016-08-30 08:14:12 [scrapy] INFO: Spider closed (finished) 
+0

スパイダーが再び実行されたときに_ログに記録されていますが、最初のURLがクロールされたときにログアウトしますか? –

+0

最初にログを見ると、スパイダーがシャットダウンすることはありません。新しいURLが要求されていないため停止します。あなたの 'start_urls'には何がありますか?あなたは多くのドメインをクロールしているようですが、デフォルトのOffsiteMiddlewareはそれらを除外します。 'http:// www.inautonews.com'は前回の実行時に既に取り込まれたようです。これらのドメインをすべてフィルタリングする予定ですか? –

答えて

0

1つの方法は、2つのクモを持っていることによって発見し、消費者のロジックをseperatingています。 1つの発見製品は、別のURLにそれらのURLを消費し、それぞれの結果を返すように別のURLを誘導します。何らかの理由で消費者が途中で死亡した場合、このクラッシュにより検出キューが影響を受けないため、簡単にクロールを再開できます。

まさにそれを行うスクイピーの人たちによって、すでに治療のための素晴らしいツールがあります。これは、フロンテラがウェブクロールフロンティアからなるフレームワークをクロールし、 配布/プリミティブをスケーリング、大規模に オンラインのWebクローラを構築することが可能であるFrontera

と呼ばれています。

クロール中に、Fronteraが論理とポリシーを順守します。それはクローラによって抽出されたリンクを格納し、優先順位をつけて が次に訪れるページを決定し、 でそれを行うことができる。

複雑なように聞こえますが、かなり前方にあります。しかし、あなたが小規模なものと1つのものを実行する場合は、手動でこれにアプローチしたいかもしれません。ディスカバリースパイダーを実行してjsonで結果を出力し、コンシューマースパイダーで永続的な方法でそのjsonをパースする(つまり、そこから値をポップする)ことができます。

+0

私はFronteraを使ってみましたが、それを得ることができませんでした。私はもう一度試してみる。私がそれをやっているやり方はあなたが言及した通りです。 1スパイダーはURLのリストを取得し、もう1つは解析するが、最初のものが死んだときは、もう一度やり直したくない。 –

+0

@RiteshKsheersagarおそらく、バッチでクロールしているかもしれません。製品のカテゴリやそのラインに沿ったものを使用して、バッチシステムを設定することができます。クロール中にクラッシュが発生した場合は、特定のカテゴリからカテゴリを再設定してください。この場合、最悪の場合、ページ全体ではなく1つのカテゴリのみを再クロールする必要があります。 – Granitosaurus

関連する問題