您的位置:首页 > 编程语言 > Python开发

批量下载豆瓣相册图片python脚本

2016-02-04 14:20 736 查看
豆瓣上有很多不错的图片,脚本用来批量下载一个相册的图片。

初学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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: