爬虫爬取pcgame的图片库,,仅仅是例子,只是爬去Co
爬虫爬取pcgame的图片库,,仅仅是例子,只是爬去Co
仅仅是例子,只是爬去Cosplay图片区的图片,并打印出对应的图片标题
#coding=gbkimport urllib2,re,osdef readsrc(src): try: url = urllib2.urlopen(src) content = url.read()#.decode('utf-8') return content except: print 'error' return Nonedef pictype(content): ''' 通过抓取网站导航栏,获得网站的图片类型 返回列表,每个列表元素为一个字典,addr代表图片类型对于的链接,name代表图片类型的名称 错误会返回None ''' p = re.compile(r'<ul>(.*)</ul>',re.S) r=p.search(content) if r: content=r.group() else: print None p = re.compile(r'<li\\s*.*?>\\s*<a href *= *"(?P<addr>.*?)">(?P<name>.*?)\\s*</a>\\s*</li>') l = [i.groupdict() for i in p.finditer(content)] l=l[1:] if len(l):return l else:return Nonedef pageinfo(src): ''' 获取一个页面的详细信息 返回对于的字典列表 name:图片的名字 cutaddr:缩小的浏览图 picaddr:实际图片的地址 ''' d=os.path.split(src)[0] try: url = urllib2.urlopen(src) content = url.read()#.decode('utf-8') except: print 'error' return None #find all the pictures info in a page p = re.compile(r'<ul.*?>(.*?)</ul>',re.S) r = p.findall(content) if not r: return None r = r[1] p = re.compile(r'<li><a href="(?P<picaddr>.*?)".*?><img.*?alt="(?P<name>.*?)" *src="(?P<cutaddr>.*?)" */></a>.*?</li>') l = [ i.groupdict() for i in p.finditer(r)] for i in l: i['picaddr']=d+'/'+i['picaddr'] if len(l): return l else: return Nonedef nextpageaddr(src): ''' 从页面的html源码中获取下一个页面地址的名称,最后一页返回None ''' content=readsrc(src) p = re.compile(r'<a class="next" href="(.*?)">.*?</a>') r = p.search(content) if r: return os.path.dirname(src)+"/"+r.group(1) else: return Nonedef picinfoaddr(src): ''' 参数相册图集的html代码 返回全部图片的相对地址 ''' content=readsrc(src) p = re.compile(r'<div class="picinfo">.*?<a href="(?P<addr>.*?)".*?>.*?</div>',re.S) r = p.search(content) if r: return os.path.dirname(src)+"/"+r.group(1) else: return Nonedef parseinfo(content): ''' 读取全部图片html代码,获得一个相册的详细信息 kw:关键字 title:标题 type:类型 pic:各个图片的地址列表,末尾加上_220x165,_medium,_small 可以得到不同大小的图片 ''' info={} temp=str() #title temp='' r=re.search('<h1>(.*?)</h1>',content)#get the pic title if r: temp = r.group(1) info['title']=temp #keyword temp='' r=re.search('<meta name="keywords" content="(.*?)" />',content) if r: temp = r.group(1) info['kw']=temp #type r=re.findall('<i><a.*?>(.*?)</a></i>.*?>',content) if r: info['type']='&'.join(r) else: info['type']='' r=re.search('<ul class=".*?">(.*?)</ul>',content,re.S) if not r:return None content=r.group(1)#filter content# print content r=re.findall('<a href=".*?<img.*?src="(.*?)".*?</a>',content) print r for index,i in enumerate(r): r[index]=i[0:i.rfind('_')]# print r[index] print info['title'],r info['pic']=r return infopath='C:\\\\pict\\\\'#下载的路径#os.mkdir(path)content=readsrc('http://photos.pcgames.com.cn/cate/3/1.html')r=pictype(content)print r[3]['name']addr = r[3]['addr']m=pageinfo(addr)while addr: for i in m: info=parseinfo(readsrc(i['picaddr'])) name=info['title']# print info['title'],info['kw'],info['pic'],info['type']# print 'downloading ',name# foldname=path+name+"\\\\"# os.mkdir(foldname)# print info['pic'] for (n,picurl) in enumerate(info['pic']): print 'downloading ',name,n f=open('c:\\\\'+name+'_'+str(n)+".jpg","wb") f.write(readsrc(picurl+'.jpg')) f.close() addr=nextpageaddr(addr)print 'end'#该片段来自于http://byrx.net
相关内容
- python通过range函数计算一组数的和,pythonrange,sum = 0num
- python一次性创建多级目录的方法,python创建,import osos
- ip地址,,#! /usr/bin/
- 基于用户的推荐系统曼哈顿算法,推荐曼哈顿算法,#-
- python 查找IP地址归属地,python查找ip归属,#!/usr/bin/e
- Python 简单的可逆加密程序,python可逆加密,#coding=utf-
- 高斯消元的Python代码规模排旋转,高斯python代码规模
- matplotlib中,如何在坐标系中画一个矩形,matplotlib坐标系
- Python 简洁ini读写,pythonini读写,#coding=utf-
- python自定义函数演示,计算Fibonacci数列,pythonfibonacci
评论关闭