我的处女Python作: 下载英文字体
比较简陋, 请各位多多指教.
目的:
-------------------
晚上到3lian网下载字体,字体实在太多,而且按A-Z作索引页面,每一个页面上有N(N>100)个ZIP文件的连接. 起初在用迅雷下载,虽然有filter功能(可以下载所有链接,选择zip文件,但A-Z也要26次,页面发现,迅雷中加载很多正在下载的连接之后,每下载完一个,他的列表更新处理的的很差,大大占用CPU,而且下载速度也一般.
一怒之下,用Python写了一个小程序,来下载所有英文字体.
设计思路:
-------------------
字体索引页为:http://www.3lian.com/ziti/zt2/fonts-XXX.htm,这里XXX为:a-z,no(按字体名首字母做索引组织,no为数字)
所以,首先取得每一个索引页上的链接,并取得链接地址是zip文件的,统一加入到一个list中
然后统一下载后保存到固定目录下.
实现:
-------------------
本实现用到了liburl用来下载文件(包括HTML和ZIP), 利用SGMLParser子类化后分析HTML文件中的符合条件的链接, 最后使用file操作保存文件.
总结:
-------------------
1.Python实在太方便了!
2.Python的库已经很多,功能强大
3.写文件时,'w'和'wb'是有差别的,在Win System下,写二进制文件,还是要用'wb'
4.open() = file()
5.通过对程序修改,就可以实现较通用的程序
Source:
-------------------
import urllib
from sgmllib import SGMLParser
class URLLister(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.urls = []
def start_a(self, attrs):
href = [v for k, v in attrs if k == 'href' and v.endswith('.zip')]
if href:
self.urls.extend(href)
Exts = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,no'
URLs = ['http://www.3lian.com/ziti/zt2/fonts-' + ele + '.htm' for ele in Exts.split(',')]
downloadURL = []
for url in URLs:
http = urllib.urlopen(url)
htmlSrc = http.read()
http.close()
parser = URLLister()
parser.feed(htmlSrc)
parser.close()
downloadURL.extend(parser.urls)
downloadURL = ['http://www.3lian.com/ziti/zt2/' + ele for ele in downloadURL]
for url in downloadURL:
filename = 'D:\TDdownload\font-en\' + url.split('/')[-1]
zipfile = open(filename, 'wb')
print 'download --- ' + url
http = urllib.urlopen(url)
zipfile.write(http.read())
http.close()
zipfile.close
发表于 @ 2006年11月28日 10:10:00|评论(loading...)|编辑