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()
'''
     

 

 

posted @ 2011-01-05 22:17  高凡凡高  阅读(726)  评论(0编辑  收藏  举报