原创 我的处女Python作: 下载英文字体收藏

新一篇: Python第二程序: 自动更新病毒库 | 旧一篇: 写给新人们[聊天记录整理]:如何做个新人!

我的处女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...)|编辑

新一篇: Python第二程序: 自动更新病毒库 | 旧一篇: 写给新人们[聊天记录整理]:如何做个新人!

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 东子