twisted とその deferredGenerator を使ってクローラーを書きます。以下は私の質問に関するコードです:
@defer.deferredGenerator
def getReviewsFromPage(self,title,params):
def deferred1(page):
d = defer.Deferred()
reactor.callLater(1,d.callback,self.parseReviewJson(page))
return d
def deferred2(dataL,title):
d = defer.Deferred()
reactor.callLater(1,d.callback,self.writeToCSV(dataL,title=title))
return d
cp = 1
#for cp in range(1,15000):
while self.running:
print cp
params["currentPageNum"] = cp
url = self.generateReviewUrl(self.urlPrefix,params = params)
print url
wfd = defer.waitForDeferred(getPage(url,timeout=10))
yield wfd
page = wfd.getResult()
wfd = defer.waitForDeferred(deferred1(page))
yield wfd
dataList = wfd.getResult()
wfd = defer.waitForDeferred(deferred2(dataList,title))
yield wfd
cp = cp+1
そして、私はジェネレーターを使用します
self.getReviewsFromPage(title,params)
reactor.run()
私の質問は: 関数 'getPage' がタイムアウト エラーを取得した場合、エラーを処理してエラー ページを再度クロールするにはどうすればよいですか? 一度 getPage に addErrback を追加して getPage を呼び戻したいと思ったのですが、reactor の実行中に新しいイベントを受信しなくなったようです。
同じ質問に出くわした人はいますか?私はあなたの助けに感謝します