我用twisted及其延迟生成器编写了一个爬虫程序。 以下是关于我的问题的代码:
@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
我用发电机
^{pr2}$我的问题是: 当函数'getPage'出现超时错误时,我该如何处理该错误并再次爬网错误页?我曾经在getPage中添加了一个adderback,并希望调用getPage,但似乎当reactor运行时,它不会再收到新事件了。
你们中有人遇到过同样的问题吗?我非常感谢你的帮助
事实并非如此。事件只在反应堆运行时发生!在
您没有共享使用
addErrback
的代码版本,因此我看不出您如何使用它是否有问题。但是,由于您已经在使用deferredGenerator
,一种更惯用的方法是:相关问题 更多 >
编程相关推荐