# -*- coding: cp936 -*-
import urllib
import urllib2
import random
import os,sys
from sgmllib import SGMLParser
class URLLister(SGMLParser):
'''获取html中的图片地址\url地址,装入list中'''
def reset(self):
SGMLParser.reset(self)
self.img = []
self.urls = []
def start_img(self, attrs):
img = [v for k, v in attrs if k=='src']
if img:
self.img.extend(img)
def start_a(self, attrs):
href = [v for k, v in attrs if k=='href']
if href:
self.urls.extend(href)
def get_docum(url):
#url=url+'//'
sock=urllib.urlopen(url)
file=sock.read()
sock.close()
return file
def is_img(url):
global imglenth
request=urllib2.Request(url)
opener=urllib2.build_opener()
try:
con=opener.open(request)
Type=con.headers.dict['content-type'][:5] #判断链接返回的 content-type是不是图片。
Length =int(con.headers.dict['content-length'])#判断图片大小
if Length>imglenth:
return Type
else:
return 0
except:
print sys.exc_info()[0],sys.exc_info()[1] ##一般来说这样就足够了
print '该图片无法在服务器找到或者图片地址无法识别!'
print url
def get_file_name(ospath,imgname,num):
#name = 'P'+str(random.randint(10000000,99999999))
#filepath = "%s%s.%s" % (ospath,name,(imgname.split('.'))[-1])
#保留原文件名
idx=imgname.rfind("/")
filename=imgname
if idx > -1:
filename=imgname[idx+1:]
filepath=ospath+'%d_'%num+filename
print filepath
return filepath
def get_img(rq):
parser = URLLister(); doc=get_docum(rq); parser.feed(doc); img = parser.img
parser.close()
for i in range(0,len(img)):
if img[i][0:4]!='http':#处理绝对路径
img[i]=rq+img[i]
return img
def get_url(rq):
parser = URLLister(); doc=get_docum(rq); parser.feed(doc); urls = parser.urls
parser.close()
for i in range(0,len(urls)):
if urls[i][0:4] != 'http': #处理绝对路径
urls[i] = rq+urls[i]
return urls
def depth(url,dep,ospath):
'''三个参数分别是
url : 需要下载的网站地址
dep :需要遍历的深度
ospath:图片下载的本地文件夹
'''
global num
if dep<=0:
return 0
else:
img=get_img(url)
for j in range(0,len(img)):
if is_img(img[j]) == 'image':
filepath = get_file_name(ospath,img[j],num+1);
if (os.path.exists(filepath)):
pass
try:
urllib.urlretrieve(img[j], filepath)
print '已经下载好第%d张图片'%(num+1)
num+=1
except:
print '该图片无法下载或者图片地址无法识别!'
print img[j]
else:
pass
urls=get_url(url)
if len(urls)>0:
for url in urls:
depth(url,dep-1,ospath)
else:
return 0
return 1
if __name__ == '__main__':
imglenth = 1 #设置需要下载的图片大小。
num=0
depth('http://tieba.baidu.com/f?kz=820731958',1,"E:\\python\\GetImageFromWeb\\img\\")
print '********************************我爬完了!!******************************************'
分享到:
相关推荐
Python 抓取 图片Python 抓取 图片Python 抓取 图片Python 抓取 图片Python 抓取 图片Python 抓取 图片
Python 抓取百度贴吧里边的图片内容
python 抓取一个网站所有图片并保存。 python 抓取一个网站所有图片并保存 python 爬虫
python抓取网页图片小程序,福利呦
主要介绍了python抓取并保存html页面时乱码问题的解决方法,结合实例形式分析了Python页面抓取过程中乱码出现的原因与相应的解决方法,需要的朋友可以参考下
python代码抓取网页中所有图片,用于网页中抓取所有图片信息。
在上篇文章给大家分享PHP源码批量抓取远程网页图片并保存到本地的实现方法,感兴趣的朋友可以点击了解详情。 #-*-coding:utf-8-*- import os import uuid import urllib2 import cookielib '''获取文件后缀名''' ...
利用python抓取网络图片的步骤: 1.根据给定的网址获取网页源代码 2.利用正则表达式把源代码中的图片地址过滤出来 3.根据过滤出来的图片地址下载网络图片
自动抓取美女图片,python爬虫
python爬虫 抓取页面图片python爬虫 抓取页面图片python爬虫 抓取页面图片
今天小编就为大家分享一篇python抓取网站的图片并下载到本地的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Python爬虫入门所有代码,其中包括Python爬虫抓取网页、Python爬虫抓取图片以及使用Spider模仿用户行为抓取403错误网页
利用python抓取网站界面中的图片,亲测可用,不同的网站只需修改抓取规则即可
python 抓取微信头像 拼接头像图片,主要itchat 包,切记不要频繁使用。
用python进行网站图片的抓取
主要为大家详细介绍了python抓取网页中链接的静态图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下