{python·图片下载}
2011-07-03 09:01
381 查看
用python写了一个下载topit.me整个专辑中的图片
import re import os from urllib import request import threading from time import sleep,ctime from html import parser import getpass import time __author__ = 'Dino' class album: albumid="" def __init__(self,albumid): self.albumid=albumid #下载 def downloadAlbum(self): self.WebUrl="http://topit.me/album/%s"%self.albumid rootUrl="http://topit.me" pageRoot="/album/%s?p="%self.albumid pparser=parserPages(self.albumid) lparser = parserLinks(self.albumid) iparser=parserImageUrl() t=tools(self.albumid) web = request.urlopen( self.WebUrl ) for context in web.readlines(): _str="%s"%context try: pparser.feed(_str) except parser.HTMLParseError: print("parser error") pass pages=pparser.getpagelist() print("分页总数:",pages) for page in range(1,pages+1): lparser.filelist=[] print("访问分页:","%s%s%s"%(rootUrl,pageRoot,page)) web = request.urlopen("%s%s%s"%(rootUrl,pageRoot,page)) for context in web.readlines(): _str="%s"%context try: lparser.feed( _str) except parser.HTMLParseError: print( "parser error") pass web.close() imageurllist= lparser.getfileurllist() imageurllist=list(set(imageurllist))#去重 print(imageurllist) for url in imageurllist: ihtmlurl=request.urlopen("http://topit.me%s"%url) print("http://topit.me%s"%url) for imagecontext in ihtmlurl.readlines(): _str="%s"%imagecontext try: iparser.feed( _str) except parser.HTMLParseError: print( "parser error") pass imagelist=iparser.getfilelist() print(imagelist) t.downjpgmutithread(imagelist) class tools: def __init__(self,albumid): self.albumname=albumid def downjpg(self, fileurl,filepath,FileName ="default.jpg" ): try: web = request.urlopen( fileurl) print("访问网络文件"+fileurl+"\n") jpg = web.read() print("保存文件"+filepath+FileName+"\n") try: File = open( filepath+FileName,"wb" ) File.write( jpg) File.close() return except IOError: print("error\n") return except Exception: print("error\n") return def downjpgmutithread(self, filepathlist ): uname=getpass.getuser()#获取用户名 DstDir="C:\\Users\\%s\\Pictures\\topit_me\\"%uname tempdir="%s%s\\"%(DstDir,time.strftime("%Y%m%d%H%M%S",time.localtime(time.time()))) os.mkdir(tempdir) print("共有%d个文件需要下载"%len(filepathlist)) for file in filepathlist: print( file ) print("开始多线程下载") task_threads=[] #存储线程 count=1 for file in filepathlist: t= threading.Thread( target=self.downjpg,args=(file,tempdir,"%d.jpg"%count) ) count=count+1 task_threads.append(t) for task in task_threads: task.start() for task in task_threads: task.join() #等待所有线程结束 print("线程结束") class parserLinks( parser.HTMLParser): filelist=[] def __init__(self,albumid): parser.HTMLParser.__init__(self) self.albumid=albumid self.p=re.compile('/album/%s/item/*'%self.albumid) def handle_starttag(self,tag,attrs): if tag == 'a': for name,value in attrs: if name == 'href': if self.p.match(value): self.filelist.append(value) def getfileurllist(self): return self.filelist class parserPages(parser.HTMLParser): pagelist=[] def __init__(self,albumid): parser.HTMLParser.__init__(self) print('/album/%s[?]p=[0-9]+'%albumid) self.page=re.compile('/album/%s[?]p=(?P<page>[0-9]+)'%albumid) def handle_starttag(self,tag,attrs): if tag == 'a': for name,value in attrs: if name == 'href': m=self.page.match(value) if m: self.pagelist.append(int(m.group("page"))) def getpagelist(self): return max(set(self.pagelist)) class parserImageUrl(parser.HTMLParser): filelist=[] def handle_starttag(self,tag,attrs): if tag=="img": if [x[0] for x in attrs ].count('class')>0: for name,value in attrs: if name=="class": if value!="img": break if name=="src": self.filelist.append(value) def getfilelist(self): return self.filelist topit_me=album("296107") topit_me.downloadAlbum()
相关文章推荐
- 第0011道练习题_Python下载<杉本有美>图片
- python在多玩图片上下载妹子图的实现代码
- python--批量下载豆瓣图片之升级版本
- python 网络爬虫爬取落网 期刊内容 下载图片 音乐
- Python 下载图片
- python实现爬虫下载美女图片
- python 下载网络图片到本地
- AsyncTask & HttpClient 下载图片
- 【Python】用Python下载在线视频和图片
- iPhone开发【十七】多线程开发之NSOperation&NSOperationQueue——异步下载图片
- 【Python】下载图片
- python 从姐脱吧下载妹子图片
- 【MNIST/Python】手写体数字训练/测试数据集(图片格式)下载及分割预处理
- 使用python下载图片
- python 下载 JPG 图片
- Python---对html文件内容进行搜索取出特定URL地址字符串,保存成列表,并使用每个url下载图片,并保存到硬盘上,使用正则re
- Python爬虫实战(五) :下载百度贴吧帖子里的所有图片
- [置顶] 【python 下载器】python下载电影&视频&电视剧
- python下载文件(图片)源码,包含爬网内容(爬url),可保存cookie
- Python爬虫小实践:下载妹子图www.mzitu.com网站上所有的妹子图片,并按相册名字建立文件夹分好文件名