2017-12-27 23 views
1

現在、Scrapy Pythonライブラリを使用しています。処理DOWNLOAD_DELAYが連続した要求に対して機能しない

最初に私はで自分自身をログに記録するFitbitのログインページ(https://www.fitbit.com/login)にFormRequestの呼び出しを行います。その後、私はFitbitのAPI(https://api.fitbit.com)に100回の要求に近づけます。

APIを強調しないために(そして禁止されないように)、settings.pyファイルのDOWNLOAD_DELAYを使用してリクエスト間に遅延を設定したいと考えました。しかし、それは動作していません。

私はチュートリアル(http://scrapy.readthedocs.io/en/latest/intro/tutorial.html)でテストしていましたが、そこで正常に動作していました。

あなたはどう思いますか?私はAPI(そのような種類のアクセスを処理するはずです)を要求しているのでしょうか?

EDIT:

class FitbitSpider: 
    start_urls = ["https://www.fitbit.com/login"] 

    def parse(self, response): 
     yield scrapy.FormRequest(url,formdata,callback=after_login) 

    def after_login(self, response): 
     for i in range(100): 
      yield scrapy.Request("https://api.fitbit.com/[...]") 

EDIT 2:ここで私のsettings.pyファイルです:

BOT_NAME = 'fitbitscraper' 

SPIDER_MODULES = ['fitbitscraper.spiders'] 
NEWSPIDER_MODULE = 'fitbitscraper.spiders' 

DOWNLOAD_DELAY = 20 #20 seconds of delay should be pretty noticeable 
+0

どのチュートリアルですか?どのようなコードをテストしましたか?擬似的な解決策が必要ない場合は、擬似コードではなく、実際のコードを表示してください。 – furas

+0

http://scrapy.readthedocs.io/en/latest/intro/tutorial.html。遅れが観察されない限り、こすれは適切に働いています。コードは300行であるので、私はここでそれを与えることはできません(トピックとは無関係でしょう、と私は信じています)。 – Xema

+0

あなたの 'settings.py'を表示してください。また、それが機能していないことをどうやって見つけましたか?完全な情報を提供することが最善です。 –

答えて

0

申し訳ありませんが、私はちょうど私の問題の答えを見つけました。

私が実行していたmain.pyファイルにCrawlerProcessを作成したことが原因です。settings.pyファイルに設定がロードされませんでした。

あらかじめ私は次のことをやっていた:私はにCrawlerProcessを変更した場合

process = CrawlerProcess({ 
    'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
}) 

process.crawl(fitbit_spider.FitbitSpider) 
process.start() 

は今:

process = CrawlerProcess({ 
     'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 
     'DOWNLOAD_DELAY': 20 
}) 

私は希望の遅延を得ますか!

注:get_project_settings()を使用してCrawlerProcessを作成することもできません。

5

the documentationによると:

ここに私のクモの擬似コードがありますDOWNLOAD_DELAY:ダウンローダが待機する時間(秒単位)。同じ ウェブサイトから連続したページをダウンロードしてください。これは、サーバーがあまりにも激しく当たってしまうのを避けるために、クロール速度を抑えるために使用できます。

我々はそこに見ることができるように、この構成は、同じウェブサイトから連続したページに影響を与え、それがあるため、クローラの割り当てslotsです。デフォルトでは、scrapyはドメインごとにスロットを設定します(これは、すべてのスロットが独自の速度を処理する必要があるからです)。

さて、あなたはまた、要求がmeta変数download_slotで扱うので、あなたはそれが何ができるか分からない場合は、その変数で遊んでいないことを確認してくださいすることができたslotに変更することができます。そこで彼らが有効になっていないことを確認してください、またはあなたが両方を使用しようとしていない

また、他の設定は次のようにDOWNLOAD_DELAYに干渉することができます同じプロジェクトの設定

また、もSpider変数として有効にでき、設定内の変数よりも優先されることを指摘することが重要です。

関連する問題