zoukankan      html  css  js  c++  java
  • Python代码练习批量下载(改进篇)

    上一篇文章实现批量下载需要配置三个地方,一个URL和循环起点与终点数值。循环的起点和终点需要你根据需要下载的资源估算,这个少不了,不过只需要配置一次。

    关键是这个URL的配置,你要每次都复制然后粘贴到代码中。我一向最讨厌复制粘贴了,所以这一次试试如何来优化。

    说明:这个程序使用到了gtk来访问剪切板,所以只能在Unix/Linux平台中使用。不过Windows下的替代功能也很好实现,代码末尾的注释给出了实现方案。 

     现在我们只需要配置一次资源保存目录,以及一个用于循环的步长数值,而无需多次来修改代码。然后在firefox或chrome中右键单击资源(图片),复制地址,然后在控制台中执行python one.py即可。

    代码
    #-*- coding:utf-8 -*-
    import os
    import time
    import urlparse
    import string
    from gtk import Clipboard  

    '''
    用于下载资源的小程序,非常适合下载静态图片文件,某些网站经过特殊处理(如登录验证/请求拦截)无法下载
    特殊说明:下载使用GNU wget,Windows需要安装这个软件
    配置说明:只需要一次配置folder和step值即可
    '''

    #保存图片的文件夹(末尾必须带上斜线),程序会在这个目录下新建一个网站目录。根据个人需求配置
    folder='/home/xgf/wget/'
    #比如你的图片地址是www.a.com/a/100.jpg,步长设置为50来下载名称为50~149的所有图片。根据个人需求配置
    step=50


    #访问剪切板的URL字符串
    cb=Clipboard()
    #样板URL,从剪切板访问
    sampleurl=cb.wait_for_text()
    #在folder下新建当前网站目录
    url=urlparse.urlparse(sampleurl)
    base
    =folder+url.hostname+'/'
    #解析图片文件的格式
    frags=sampleurl.split('/')
    arr
    =frags[-1].split('.')
    #图片文件的扩展名
    ext=arr[1]
    baseurl
    ='/'.join(frags[:-1])
    #分析循环的起点与终点
    start=int(arr[0])-step
    end
    =start+step*2
    if os.path.isfile(base+str(arr[0])+'.jpg'):
        exit()
    if not os.path.isdir(folder):
        os.mkdir(folder)
    if not os.path.isdir(base):
        os.mkdir(base)
    os.chdir(base)

    #根据设置的URL的起点与终点生成批量URL地址,保存到文本文件中。
    now=time.localtime()
    filelist
    ='urls-{0}{1}{2}{3}{4}.txt'.format(now[1],now[2],now[3],now[4],now[5])
    f
    =open(base+filelist,'w')
    for x in xrange(start,end,1):
        f.write(
    '{0}/{1}.{2}\n'.format(baseurl,x,ext))
    f.close()
    os.system(
    'wget -i '+filelist)

    #如果希望保存本次下载的URL列表则注释下面一行代码
    os.remove(base+filelist)

    '''
    #下面是在windows系统中操作剪切板的方案,没有测试
    import win32clipboard as w
    import win32con

    def getText():
        w.OpenClipboard()
        d = w.GetClipboardData(win32con.CF_TEXT)
        w.CloseClipboard()
        return d

    def setText(aString):
        w.OpenClipboard()
        w.EmptyClipboard()
        w.SetClipboardData(win32con.CF_TEXT, aString)
        w.CloseClipboard()
    '''
         
  • 相关阅读:
    UITableview
    UIscrollview
    UITextField(详细设置)
    iOS开发UI篇—Quartz2D使用(矩阵操作)
    iOS开发UI篇—Quartz2D使用(图形上下文栈)
    类的sizeof
    Implement strStr()
    KMP很清楚的一篇解释
    Best Time to Buy and Sell Stock II
    Triangle
  • 原文地址:https://www.cnblogs.com/1000/p/python_batch_download_improved.html
Copyright © 2011-2022 走看看