当前位置: 代码迷 >> Web前端 >> twisted-webclient将网页另存为资料
  详细解决方案

twisted-webclient将网页另存为资料

热度:176   发布时间:2012-10-07 17:28:51.0
twisted-webclient将网页另存为文件

downloadToTempFile函数通过调用twisted.web.client.downloadPage返回Deferred,downloadToTempFile加入returnFilename做为Deferred的回调,且temp文件名做为一个额外的参数。这意味着当downloadToTempFile结果来临时,reactor将调用returnFileName,做为downloadToTempFile 的第一个参数,做为第二个参数,此外,还注册了一个downloadToTempFile本身的回调printFile,将returnFilename返回的值做为文件名

?

?

from twisted.web import client

import tempfile



def downloadToTempFile(url):

    """

    Given a URL, returns a Deferred that will be called back with

    the name of a temporary file containing the downloaded data.

    """

    tmpfd, tempfilename = tempfile.mkstemp( )

    os.close(tmpfd)

    return client.downloadPage(url, tempfilename).addCallback(

        returnFilename, tempfilename)



def returnFilename(result, filename):


    return filename



if __name__ == "_ _main_ _":

    import sys, os

    from twisted.internet import reactor



    def printFile(filename):

        for line in file(filename, 'r+b'):
            sys.stdout.write(line)

        os.unlink(filename) # delete file once we're done with it

        reactor.stop( )



    def printError(failure):

        print >> sys.stderr, "Error:", failure.getErrorMessage( )

        reactor.stop( )



    if len(sys.argv) == 3:

        url = sys.argv[2]


        downloadToTempFile(url).addCallback(

        printFile).addErrback(

        printError)

        reactor.run( )

    else:

        print "Usage: %s <URL>" % sys.argv[0]


?