我以前写的第一个python程序
2年多前,看了一个下午的电子书,写了一个晚上,狂丑(不过现在python程序也写的很丑)。
---------------------------------------------------------------------
由于Fish用网易相册给我中转我们在南京时候的照片,我不得不写了一个现在程序来自 动下载这100多M的相片。 下面这个代码 就是用python写的一个多线程现在网易相册一整个目录的程序。 不过网易似乎做了 http链接限制。 所以如果 太多照片 还是要加上线程控制或者将 thread.start_new_thread去掉,直接用阻塞方式调用getphoto
import urllib
import thread
import urlparse
import pullparser, sys
import re
def getPhoto(surl,burl,sfname,bfname):
wps = open(sfname, "wb")
fps = urllib.urlopen(surl)
n=0
while 1:
s = fps.read(8192)
if not s:
break
wps.write(s)
n = n + len(s)
fps.close()
wps.close()
wpb = open(bfname ,"wb")
fpb = urllib.urlopen(burl)
k=0
while 1:
b = fpb.read(8192)
if not b:
break
wpb.write(b)
k = k + len(b)
fpb.close()
wpb.close()
print "copied "+str(n)+" " +str(k)+" from "+" "+surl+" "+burl
#以下是 网易相册中 某一目录的链接地址
DirURL ="http://photo.163.com/openalbum.php?username=帐号&_dir=%目录号&page="
pat = r'(\S*)/__scale__1_(\S*.jpg$)' # My pattern
r = re.compile(pat) # Compile it
for i in [1, 2, 3, 4, 5 ,6 ,7]:
baseURL=DirURL+str(i)
print "baseURL ="+baseURL
usock = urllib.urlopen(baseURL)
# print usock.read()
p = pullparser.PullParser(usock)
for token in p.tags("img"):
if token.type == "endtag": continue
print "hello\n"
imgurl = dict(token.attrs).get("src", "-")
print imgurl+"\n"
m = r.match(imgurl) # See if string s matches
if not m:
continue ;
surl=imgurl;
burl=m.group(1)+"/"+m.group(2)
sfname = "s"+m.group(2)
bfname ="b"+m.group(2)
print "surl "+surl+" "+sfname+"\n"
print "burl "+burl+" "+bfname+"\n"
try:
thread.start_new_thread(getPhoto,(surl,burl,sfname,bfname))
except IOError:
print "!!!IOException\n"
发表评论