問題があります。私はしばらくの間、関数の実行を停止する必要がありますが、全体として解析の実装を停止する必要はありません。つまり、私は非ブロッキングの一時停止が必要です。治療:ノンブロッキング・ポーズ
イッツのようになります。
class ScrapySpider(Spider):
name = 'live_function'
def start_requests(self):
yield Request('some url', callback=self.non_stop_function)
def non_stop_function(self, response):
for url in ['url1', 'url2', 'url3', 'more urls']:
yield Request(url, callback=self.second_parse_function)
# Here I need some function for sleep only this function like time.sleep(10)
yield Request('some url', callback=self.non_stop_function) # Call itself
def second_parse_function(self, response):
pass
機能non_stop_functionは、しばらくの間停止する必要がありますが、それは、出力の残りの部分をブロックするべきではありません。
私がtime.sleep()
を挿入すると、パーサ全体が停止しますが、必要はありません。 twisted
などを使用して1つの機能を停止することはできますか?
理由::n秒ごとにウェブサイトのページを解析する非ブロック機能を作成する必要があります。そこに彼女はURLを取得し、10秒間満たします。取得されたURLは引き続き機能しますが、主な機能はスリープ状態にある必要があります。
UPDATE:TkTechとviachへ
感謝。 1つの答えは私が保留中のRequest
を作成する方法を理解する助けとなり、2番目の方法はそれをアクティブにする方法です。どちらの答えはお互いを補完し、私はScrapyための優れたノン・ブロッキングのポーズ製:あなたはレート制限のためにこれを使用しようとしている場合
yield Request('https://example.com/', callback=self.call_after_pause, dont_filter=True)
このアプローチは役に立ちますか? http://stackoverflow.com/questions/37002742/calling-the-same-spider-programmatically/37007619#37007619 –
@RafaelAlmeida非常に便利な方法ではありません。私は、パーサのアーキテクチャを妥協することなく、このポーズを将来使用したいと思っています。 – JRazor
リクエストをしないように一時停止しますか?メソッド内で一時停止しますか?この一時停止の理由を指定できると非常に役に立ちます。 – eLRuLL