豆瓣上有很多不错的图片,脚本用来批量下载一个相册的图片。
初学python,只是练练手,程序比较丑陋
#encoding:utf8
import urllib,os,re,time
import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
class img():
def __init__(self,url):
self.url=url
self.getname()
print self.name
self.getnum()
print self.num
self.downloadimg()
#相册的名称
def getname(self):
wp = urllib.urlopen(self.url)
content = wp.read() #获取页面内容
start=content.find('<title>')
content=content[start+10:]
end=content.find('</title>')
content=content[:end].rstrip()
self.name=content
#相册一共有多少页图片
def getnum(self):
wp = urllib.urlopen(self.url+'?start=0')
content = wp.read() #获取页面内容
start=content.find("""data-total-page=\"""")
content=content[start+17:]
end=content.find('\">')
content=content[:end]
self.num=int(content)
"""
选择某一个豆瓣相册,其中任意一张图片的的右上角有一个"返回相册"
点击"返回相册"到相册首页可以看到每一页都是18张图片,每一个翻页的网址为相册的地址加上?start=0,?start=18……
这个函数实现相册首页翻页,并返回所有的翻页地址
"""
def geturl(self):
n = [x*18 for x in range(0, self.num)]
url_list = []
for i in n:
url =self.url+'?start=%s' % i
url_list.append(url)
return url_list
def getimg(self):
img_url = []
url = self.geturl()
#print 'url:%s' %url
for u in url:
a = urllib.urlopen(u)
for line in a.readlines():
if 'thumb' in line:
img_url.append(line.strip()[10:-4].replace('thumb', 'photo'))
return img_url
def downloadimg(self):
download_url = self.getimg()
#print download_url
outputfile='d:\\'+self.name.encode('gbk')
if os.path.exists(outputfile)==False:
os.makedirs(outputfile)
print '============'
for u in download_url:
urllib.urlretrieve(u,outputfile+'/'+u.split('/')[-1])
time.sleep(5) #每下一张,休息5秒,防止被封
#print '%s\n' %u
if __name__ == '__main__':
try:
url= 'http://www.douban.com/photos/album/67093521/'#相册地址
a=img(url)
except Exception,e:
print e