艺术迷(fansart.com) 首页 收藏本站 RSS频道
艺术迷首页 -> 网页设计 -> 用asp解析图片地址,并将其保存
2006-3-2   作者:佚名   来源:
页面功能: 【评论】有错就点】 【字体: 】 【打印】 【关闭【收藏本页】

 用asp解析图片地址,并将其保存 

 
 要实现这个功能需要经过三个步骤: 
一,取得原页中的图片的地址。方法很多,可以用分割字符串,也可以用正则匹配。实践证明用正则匹配最为简单。经过分析图片的地址都保存在<img>标签中。我们可以先取得所有这个标签。过程如下: 
Set objRegExp = New Regexp’设置配置对象 
objRegExp.IgnoreCase = True’忽略大小写 
objRegExp.Global = True’设置为全文搜索 
objRegExp.Pattern = "<img.+?>"’为了确保能准确地取出图片地址所以分为两层配置:首先找到里面的<img>标签,然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。 
strs=trim(str) 
Set Matches =objRegExp.Execute(strs)’开始执行配置 
For Each Match in Matches 
RetStr = RetStr getimgs( Match.Value )’执行第二轮的匹配 
Next 

所有的图片在里面都是这样的src="http://图片的地址",所以可以这样来取得确切的图片地址: 
function getimgs(str) 
getimgs="" 
Set objRegExp1 = New Regexp 
objRegExp1.IgnoreCase = True 
objRegExp1.Global = True 
objRegExp1.Pattern = "http://.+?"""’取出里面的地址 
set mm=objRegExp1.Execute(str) 
For Each Match1 in mm 
getimgs=getimgs&"  "left(Match1.Value‚len(Match1.Value)-1)’把里面的地址串起来备用 
next 
end function 

取得了所有的图片的地址,我们就可以进行第二步的操作了。 
二,下载图片并保存在服务器上。这个又可以分为两个步骤:一个是取得图片的内容,另一个是保存在服务器上。取得图片的内容是通过下面的函数来实现的: 
function getHTTPPage(url) 
on error resume next 
dim http 
set http=server.createobject("MSXML2.XMLHTTP")‘使用xmlhttp的方法来获得图片的内容 
Http.open "GET"‚url‚false 
Http.send() 
if Http.readystate<>4 then 
exit function 
end if 
getHTTPPage=Http.responseBody 
set http=nothing 
if err.number<>0 then err.Clear 
end function 
取得了图片的内容要保存,给人一种感觉是用FSO来作就可以了,但实际上不行,这样保存程序就会出错,因为FSO不支持流式的文件,所以我们要调用另一个对象:ADO.STREM。具体的过程如下: 
function saveimage(from‚tofile) 
dim geturl‚objStream‚imgs 
geturl=trim(from) 
imgs=gethttppage(geturl)’取得图片的具休内容的过程 
Set objStream = Server.CreateObject("ADODB.Stream")’建立ADODB.Stream对象,必须要ADO 2.5以上版本 
objStream.Type =1’以二进制模式打开 
objStream.Open 
objstream.write imgs’将字符串内容写入缓冲 
objstream.SaveToFile server.mappath(tofile)‚2’-将缓冲的内容写入文件 
objstream.Close()’关闭对象 
set objstream=nothing 
end function 
所以只要用一个循环来把刚才取得的地址中的图片全部保存下来,具体过程如下: 
arrimg=split(retstr‚"  ")’分割字串,取得里面地址列表 
allimg="" 
newimg="" 
for i=1 to ubound(arrimg) 
if arrimg(i)<>"" and instr(allimg‚arrimg(i))<1 then’看这个图片是否已经下载过 
fname=baseurl&cstr(i&mid(arrimg(i)‚instrrev(arrimg(i)‚"."))) 
saveimage(arrimg(i)‚fname)‘保存地址的函数,过程见上面 
allimg=allimg&"  "&arrimg(i)’把保存下来的图片的地址串回起来,以确定要替换的地址 
newimg=newimg&"  "&fname’把本地的地址串回起来 
end if 
next 
第三步就是替换原来的地址了。具体的过程就是下面了: 
arrnew=split(newimg‚"  ")’取得原来的图片地址列表 
arrall=split(allimg‚"  ")’取得已经保存下来的图片的地址列表 
for i=1 to ubound(arrnew)’执行循环替换原来的地址 
strs=replace(strs‚arrall(i)‚arrnew(i)) 
next 
cctv=strs 
讲到这里,这个函数的基本过程就是这样了,当然可以对它进行改造就可以实现更多的功能,如:加上图片大小的限制,加上对本地机上的图片下载的限制,以免造成重复下载图片。同时也应该看到这个函数的不足之处是只能处理静态的图片文件,不能适用程序生成的图片。 

网友评论
发表评论
您的姓名: 匿名发送
电子邮件:
评论内容:
不能超过100个字符



所有留言只代表网友个人观点,不代表本站观点。
请各位遵纪守法并注意语言文明。
新闻搜索
关 键 词:
搜索范围:
全站精华
图文精彩
清风楼书(一)[图]--平面广告
【2006-3-29 10:52:08】
清风楼书(一)
古典楼书(精品欣赏)(1)[图]--平面广告
【2006-4-5 15:03:08】
古典楼书(精品欣赏)(1)
美国插画师kevindart作品(1)[图]--CG插画
【2006-4-11 15:34:43】
美国插画师kevindart作品(1)
美国插画师kevindart作品[图]--CG插画
【2006-4-11 15:37:32】
美国插画师kevindart作品
荷兰著名画家Anton
【2006-4-11 15:49:41】
荷兰著名画家Anton Pieck插画
非常可爱的儿童插画(1)[图]--CG插画
【2006-4-11 15:59:16】
非常可爱的儿童插画(1)
回忆紫禁城里那些逝去的[图]--中国艺术
【2006-4-11 16:34:31】
回忆紫禁城里那些逝去的
国粹京剧脸谱表情[图]--界面设计
【2006-4-11 17:51:33】
国粹京剧脸谱表情
高傲的玫瑰-温碧霞[图]--摄影艺术
【2006-4-12 8:58:34】
高傲的玫瑰-温碧霞
北邦插画欣赏(1)[图]--CG插画
【2006-4-13 9:49:02】
北邦插画欣赏(1)
yashasi插画作品欣赏[图]--CG插画
【2006-4-13 18:32:29】
yashasi插画作品欣赏
cg插画欣赏[图]--CG插画
【2006-4-14 9:21:18】
cg插画欣赏
溯源居广告欣赏--小红人[图]--平面广告
【2006-4-14 14:45:57】
溯源居广告欣赏--小红人
泊林花园推广故事绘本(1)[图]--CG插画
【2006-4-20 11:34:33】
泊林花园推广故事绘本(1)
泊林花园推广故事绘本(2)[图]--CG插画
【2006-4-20 11:43:23】
泊林花园推广故事绘本(2)
万科西山庭院.格.沉.尊[图]--平面广告
【2006-4-21 9:08:35】
万科西山庭院.格.沉.尊
水木清华地产广告欣赏[图]--平面广告
【2006-4-26 9:31:54】
水木清华地产广告欣赏