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]


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值