我试图在这件事上得到支持,但我完全糊涂了。
这是我的代码:
from twisted.internet import reactor
from twisted.web.client import getPage
from twisted.web.error import Error
from twisted.internet.defer import DeferredList
from sys import argv
class GrabPage:
def __init__(self, page):
self.page = page
def start(self, *args):
if args == ():
# We apparently don't need authentication for this
d1 = getPage(self.page)
else:
if len(args) == 2:
# We have our login information
d1 = getPage(self.page, headers={"Authorization": " ".join(args)})
else:
raise Exception('Missing parameters')
d1.addCallback(self.pageCallback)
dl = DeferredList([d1])
d1.addErrback(self.errorHandler)
dl.addCallback(self.listCallback)
def errorHandler(self,result):
# Bad thingy!
pass
def pageCallback(self, result):
return result
def listCallback(self, result):
print result
a = GrabPage('http://www.google.com')
data = a.start() # Not the HTML
我想把调用start()时给pageCallback的HTML取出。这对我来说是个陷阱。泰!很抱歉我的编码很烂。
你错过了Twisted操作的基本知识。它都围绕着
reactor
旋转,你甚至从来没有运行过它。把反应堆想象成这样:(来源:krondo.com)
在你启动反应堆之前,通过设置延迟,你所做的一切就是把它们连在一起,而不引发任何事件。
我建议你读一读Twisted Intro。它很快,而且它确实提供了Twisted文档没有的所有缺失信息
无论如何,这里是
getPage
最基本的用法示例:因为
getPage
返回一个deferred,所以我将回调print_and_stop
添加到deferred链中。之后,我启动reactor
。反应堆启动getPage
,然后启动print_and_stop
,打印来自aol.com的数据,然后停止反应堆。编辑以显示操作代码的工作示例:
相关问题 更多 >
编程相关推荐