zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

用asp自动解析网页中的图片地址

ASP网页地址自动 解析 图片
2023-06-13 09:13:40 时间
一,取得原页中的图片的地址。 <%
functionPicStr(str)
 SetobjRegExp=NewRegexp"设置配置对象
 objRegExp.IgnoreCase=True"忽略大小写
 objRegExp.Global=True"设置为全文搜索
 objRegExp.Pattern="<IMG.+?>""为了确保能准确地取出图片地址所以分为两层配置:首先找到里面的<IMG>标签,然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。
 strs=trim(str)
 SetMatches=objRegExp.Execute(strs)"开始执行配置
 ForEachMatchinMatches
 PicStr=PicStr&getimgs(Match.Value)"执行第二轮的匹配
 Next
 "所有的图片在里面都是这样的src="http://图片的地址",所以可以这样来取得确切的图片地址
endfunction

functiongetimgs(str)
 getimgs=""
 SetobjRegExp1=NewRegexp
 objRegExp1.IgnoreCase=True
 objRegExp1.Global=True
 objRegExp1.Pattern="http://.+?""""取出里面的地址
 setmm=objRegExp1.Execute(str)
 ForEachMatch1inmm
 getimgs=getimgs&"||"&left(Match1.Value,len(Match1.Value)-1)"把里面的地址串起来备用
 next
endfunction
%>

二,下载图片并保存在服务器上。 <%
functiongetHTTPPage(url)
  onerrorresumenext
  dimhttp
  sethttp=server.createobject("MSXML2.XMLHTTP")"使用xmlhttp的方法来获得图片的内容
  Http.open"GET",url,false
  Http.send()
  ifHttp.readystate<>4then
  exitfunction
  endif
  getHTTPPage=Http.responseBody
  sethttp=nothing
  iferr.number<>0thenerr.Clear
endfunction
"取得了图片的内容要保存,给人一种感觉是用FSO来作就可以了,但实际上不行,这样保存程序就会出错,因为FSO不支持流式的文件,所以我们要调用另一个对象:ADO.STREM。具体的过程如下:
functionsaveimage(from,tofile)
  dimgeturl,objStream,imgs
  geturl=trim(from)
  imgs=gethttppage(geturl)"取得图片的具休内容的过程
  SetobjStream=Server.CreateObject("ADODB.Stream")"建立ADODB.Stream对象,必须要ADO2.5以上版本
  objStream.Type=1"以二进制模式打开
  objStream.Open
  objstream.writeimgs"将字符串内容写入缓冲
  objstream.SaveToFileserver.mappath(tofile),2"-将缓冲的内容写入文件
  objstream.Close()"关闭对象
  setobjstream=nothing
endfunction

"所以只要用一个循环来把刚才取得的地址中的图片全部保存下来,具体过程如下:
arrimg=split(PicStr(str),"||")"分割字串,取得里面地址列表
allimg=""
newimg=""
fori=1toubound(arrimg)
ifarrimg(i)<>""andinstr(allimg,arrimg(i))<1then"看这个图片是否已经下载过
fname=baseurl&cstr(i&mid(arrimg(i),instrrev(arrimg(i),".")))
saveimage(arrimg(i),fname)‘保存地址的函数,过程见上面
allimg=allimg&"||"&arrimg(i)"把保存下来的图片的地址串回起来,以确定要替换的地址
newimg=newimg&"||"&fname"把本地的地址串回起来
endif
next
"第三步就是替换原来的地址了。具体的过程就是下面了:
arrnew=split(newimg,"||")"取得原来的图片地址列表
arrall=split(allimg,"||")"取得已经保存下来的图片的地址列表
fori=1toubound(arrnew)"执行循环替换原来的地址
  strs=replace(strs,arrall(i),arrnew(i))
next
%>