成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
用asp自動解析網頁中的圖片地址[優化]
作者:Jaron (唐伯虎點蚊香) 發布時間:2003-12-23 14:23:45 | 【字體:

icech:這是修改優化chinahuman 的代碼,使用了一下,總體還是不錯的,但是有些網友說有時候不行。大家多交流一下。

很久沒寫過東西了,今天看了chinahuman 的《用asp自動解析網頁中的圖片地址,并將其保存到本地服務器》,于是優化了這個程序,并且將所有的功能都函數化了,希望對學習 XMLHTTP 的朋友有所幫助。
程序實現功能:自動將遠程頁面的文件中的圖片下載到本地。

<%
'將本文保存為 save2local.asp
'測試:save2local.asp?url=http://ent.sina.com.cn/s/m/2003-11-11/1411231388.html
'本文根據 chinahuman 的《用asp自動解析網頁中的圖片地址,并將其保存到本地服務器》改編和優化
'自動創建目錄,自動將原文件名更名,文件格式的限制以及其他功能的一些優化
'自動保存網頁文件中 http://.... 格式的圖片到本地
'轉載請注明出處:http://www.jaron.cn  url =  request("url")
localaddr = server.MapPath("images_remote/") '保存到本地的目錄
localdir = "images_remote/" 'http 訪問的相對路徑
AllowFileExt = "jpg|bmp|png|gif" '支持的文件名格式
'參數設置完畢

if createdir(localaddr) = false then
 response.Write "創建目錄失敗,請檢查目錄權限"
 response.End
end if
response.Write Convert2LocalAddr(url,localaddr,localdir)

function Convert2LocalAddr(url,localaddr,localdir)
  '參數說明
  'url 頁面地址
  'localaddr 保存本地的物理地址
  'localdir 相對路徑
 strContent = getHTTPPage(url)
 Set objRegExp = New Regexp
 objRegExp.IgnoreCase = True
 objRegExp.Global = True
 objRegExp.Pattern = "<img.+?>"
 Set Matches =objRegExp.Execute(strContent)
 For Each Match in Matches
  RetStr = RetStr & GetRemoteImages(Match.Value)
 Next
 ImagesArray=split(RetStr,"||")
 RemoteImage=""
 LocalImage=""
 for i=1 to ubound(ImagesArray)
  if ImagesArray(i)<>"" and instr(RemoteImage,ImagesArray(i))<1 then
   fname=baseurl&cstr(i&mid(ImagesArray(i),instrrev(ImagesArray(i),".")))
   ImagesFileName = ImagesArray(i)
   AllowFileExtArray = split(AllowFileExt,"|")
   isGetFile = false
   for tmp = 0 to ubound(AllowFileExtArray)
    if lcase(GetFileExt(ImagesFileName)) = ALlowFileExtArray(tmp) then
     isGetFile=True
    end if
   next
   if isGetFile = true then
    newfilename =  GenerateRandomFileName(fname)
    call Save2Local(ImagesFileName,localaddr & "/" & newfilename)
    RemoteImage=RemoteImage&"||"& ImagesFileName
    LocalImage=LocalImage&"||" & localdir & newfilename
   end if
  end if
 next
 arrnew=split(LocalImage,"||")
 arrall=split(RemoteImage,"||")
 for i=1 to ubound(arrnew)
  strContent=replace(strContent,arrall(i),arrnew(i))
 next
 Convert2LocalAddr = strContent
end function

function GetRemoteImages(str)
 Set objRegExp1 = New Regexp
 objRegExp1.IgnoreCase = True
 objRegExp1.Global = True
 objRegExp1.Pattern = "http://.+? "
 set mm=objRegExp1.Execute(str)
 For Each Match1 in mm
  tmpaddr = left(Match1.Value,len(Match1.Value)-1)
  GetRemoteImages=GetRemoteImages&"||" & replace(replace(tmpaddr,"""",""),"'","")
 next
end function

function getHTTPPage(url)
 on error resume next
 dim http
 set http=Server.createobject("Msxml2.XMLHTTP")
 Http.open "GET",url,false
 Http.send()
 if Http.readystate<>4 then exit function
 getHTTPPage=bytes2BSTR(Http.responseBody)
 set http=nothing
 if err.number<>0 then err.Clear 
end function

Function bytes2BSTR(vIn)
 dim strReturn
 dim i,ThisCharCode,NextCharCode
 strReturn = ""
 For i = 1 To LenB(vIn)
  ThisCharCode = AscB(MidB(vIn,i,1))
  If ThisCharCode < &H80 Then
   strReturn = strReturn & Chr(ThisCharCode)
  Else
   NextCharCode = AscB(MidB(vIn,i+1,1))
   strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
   i = i + 1
  End If
 Next
 bytes2BSTR = strReturn
End Function

function getHTTPimg(url)
 on error resume next
 dim http
 set http=server.createobject("MSXML2.XMLHTTP")
 Http.open "GET",url,false
 Http.send()
 if Http.readystate<>4 then  exit function
 getHTTPimg=Http.responseBody
 set http=nothing
 if err.number<>0 then err.Clear
end function

function Save2Local(from,tofile)
 dim geturl,objStream,imgs
 geturl=trim(from)
 imgs=gethttpimg(geturl)
 Set objStream = Server.CreateObject("ADODB.Stream")
 objStream.Type =1
 objStream.Open
 objstream.write imgs
 objstream.SaveToFile tofile,2
 objstream.Close()
 set objstream=nothing
end function

function geturlencodel(byval url)'中文文件名轉換
 Dim i,code
 geturlencodel=""
 if trim(Url)="" then exit function
 for i=1 to len(Url)
  code=Asc(mid(Url,i,1))
  if code<0 Then code = code + 65536
  If code>255 Then
   geturlencodel=geturlencodel&"%"&Left(Hex(Code),2)&"%"&Right(Hex(Code),2)
  else
   geturlencodel=geturlencodel&mid(Url,i,1)
  end if
 next
end function

Function GenerateRandomFileName(ByVal szFilename) '根據原文件名,自動以日期YYYY-MM-DD-RANDOM格式生成新文件名
    Randomize
    ranNum = Int(90000 * Rnd) + 10000
    If Month(Now) < 10 Then c_month = "0" & Month(Now) Else c_month = Month(Now)
    If Day(Now) < 10 Then c_day = "0" & Day(Now) Else c_day = Day(Now)
    If Hour(Now) < 10 Then c_hour = "0" & Hour(Now) Else c_hour = Hour(Now)
    If Minute(Now) < 10 Then c_minute = "0" & Minute(Now) Else c_minute = Minute(Now)
    If Second(Now) < 10 Then c_second = "0" & Second(Now) Else c_second = Minute(Now)
    fileExt_a = Split(szFilename, ".")
    FileExt = LCase(fileExt_a(UBound(fileExt_a)))
    GenerateRandomFileName = Year(Now) & c_month & c_day & c_hour & c_minute & c_second & "_" & ranNum & "." & FileExt
End Function

Function CreateDIR(ByVal LocalPath) '建立目錄的程序,如果有多級目錄,則一級一級的創建
    On Error Resume Next
    LocalPath = Replace(LocalPath, "\", "/")
    Set FileObject = server.CreateObject("Scripting.FileSystemObject")
    patharr = Split(LocalPath, "/")
    path_level = UBound(patharr)
    For I = 0 To path_level
        If I = 0 Then pathtmp = patharr(0) & "/" Else pathtmp = pathtmp & patharr(I) & "/"
        cpath = Left(pathtmp, Len(pathtmp) - 1)
        If Not FileObject.FolderExists(cpath) Then FileObject.CreateFolder cpath
    Next
    Set FileObject = Nothing
    If Err.Number <> 0 Then
        CreateDIR = False
        Err.Clear
    Else
        CreateDIR = True
    End If
End Function

function GetfileExt(byval filename)
 fileExt_a=split(filename,".")
 GetfileExt=lcase(fileExt_a(ubound(fileExt_a)))
end function
%>


有一點要注意的是,這里只是分析了以 http開頭的圖片的地址。否則不下載圖片,可以轉換一下地址就行了,再提供幾個小函數,分析地址用的:

Function findurl(thisurl)
 if thisurl <> "" Then
 findurl=""
 strlen=InStr(8,thisurl,"/")
 If strlen=0 Then strlen =1
 findurl=Mid(thisurl,strlen,28)
 end if
end Function

function findurlpath(thisurl)
 thisurl = replace(thisurl,"http://","@@")
 ary_tmp = split(thisurl,"/")
 for tmp = 0 to ubound(ary_tmp)
  if tmp < ubound(ary_tmp) then
   urltmp = urltmp & "/" & ary_tmp(tmp)
  end if
 next
 urltmp = right(urltmp,len(urltmp)-1)
 findurlpath = replace(urltmp,"@@","http://") & "/"
end function

function findurlhost(thisurl)
 thisurl = replace(thisurl,"http://","@@")
 ary_tmp = split(thisurl,"/")
 urltmp = ary_tmp(0)
 findurlhost = replace(urltmp,"@@","http://") & "/"
 findurlhost = left(findurlhost,len(findurlhost)-1)
end function



文章來源:CSDN
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 陈巴尔虎旗| 渝中区| 固原市| 吕梁市| 仪征市| 苍山县| 徐闻县| 日喀则市| 晋宁县| 鹰潭市| 安泽县| 阜城县| 宜章县| 鹰潭市| 民丰县| 阿鲁科尔沁旗| 新巴尔虎左旗| 彭水| 南汇区| 黑龙江省| 郯城县| 嘉善县| 通河县| 万荣县| 平和县| 井冈山市| 大城县| 玛曲县| 綦江县| 泰安市| 五原县| 民和| 克什克腾旗| 天祝| 尉氏县| 新竹县| 临清市| 云南省| 泽普县| 墨竹工卡县| 荃湾区|