트위스트 된 deferredGenerator를 사용하여 크롤러를 작성합니다. 이 다음 내 질문에 대한 코드입니다 :트위스트를 사용하는 크롤러. getPage가 타임 아웃 오류를 발생시킬 때 어떻게해야합니까?
@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를 호출하려고했지만 원자로가 실행 중일 때 더 이상 새 이벤트를받지 못하는 것 같습니다.
동일한 질문이 발생 했습니까? 도와 주셔서 감사합니다.
답장을 보내 주셔서 감사합니다. 나는 어제 문제를 해결했고 솔루션은 wfd.getResult에서 페이지를 가져 와서 해당 유형이 NoneType인지 확인하는 것과 매우 비슷했습니다 (유형에 errback과의 관계가 있는지 여부는 알 수 없습니다. 오류를 되돌리려면 아무 것도 반환하지 않습니다.) 당신은 적절한 해결책을 제시했습니다. 고맙습니다! – user2147650