用XML组件生成静态首页 。asp利用xmlhttp抓取特定网页内容例子。XmlHttp对象及其应用

用XML组件生成静态首页 

了解asp的人应该都知道asp是一种解释执行的脚本程序语言,而脚本程序的执行效率往往都是很低的,如果站点的访问量相对较高的话服务器就会非常消耗资源,表现的结果就是站点访问速度急速下降.解决的方法,除了优化程序提高执行效率,还有一个方法就是将网站内的访问量大的页面定时的生成静态html文件,这样可以非常有效的解决访问速度问题,当然前提是你的服务器速度也要不是很慢了,不然怎么弄都是没有效果的.   下面我介绍一种利用Msxml2.ServerXMLHTTP组件来抓取您所要生成静态的网页,然后再利用fso,或者ado来写入文件的一种方法,需要注意的是本文例子全部采用utf-8编码,如果改为gb2312需要做相应属性的修改! 先给处下面的函数: 
<!--'相关问题可访问
http://www.knowsky.com

Function GetURL(URL)
'下载主函数
const TimeInterval=60
'设定时间间隔
'如果下载时间很慢,就写成120秒
'Response.LCID=2052
const lResolve=6
'解析域名超时时间,秒
const lConnect=6
'连接站点超时时间,秒
const lSend=6
'发送数据请求超时时间,秒
const lReceive=40
'下载数据超时时间,秒
on error resume Next
Dim http
Set http = Server.CreateObject("Msxml2.ServerXMLHTTP")
http.setTimeouts lResolve*1000,lConnect*1000,lSend*1000,lReceive*1000
http.Open "GET",URL,False
http.Send
Select Case http.readyState
Case 0
GetURL="对象初始化失败"
Err.Clear
set http=nothing
Exit Function
Case 1
GetURL="域名分析超时/连接站点超时"
Err.Clear
set http=nothing
Exit Function
Case 2
GetURL="发送数据请求超时,是不是服务器出故障了"
Err.Clear
set http=nothing
Exit Function
Case 3
GetURL="数据下载超时/等待反馈时间超时"
Err.Clear
set http=nothing
Exit Function
Case 4
'下载成功
End Select
If http.status<>200  then
GetURL="下载失败"&Err.description
Err.Clear
set http=nothing
Exit Function
END IF
If http.status="200" then
GetURL=http.ResponseText
'GetURL=SaveFile()
End If
set http=nothing
End Function
-->


  主要功能是抓取地址参数的网页文件的内容  使用方法varia=GetURL("http://www.supersha.cn"),如果是本地测试地址可以写成http://localhost/default.asp   使用此函数需要注意的是Response.LCID=2052属性在windows server 2000下不被支持,不过问题不大只要注释掉即可正常使用!   还有一些超时属性可以根据需要自定义,但注意不要设置的时间太短,否则如果文件大或者地址访问速度较慢就容易抓取失败! 这让我们就可以利用此函数来抓取你想要生成的网页文件内容了.将内容存入变量,等着写入文件吧!


下面给出这个类,用来将刚刚利用函数抓取的内容写入相应文件,这样就大功告成了! 直接生成你所要生成的网页吧,非常方便而且不用修改原来的文件!

Class Htmlmaker

'相关问题请参看 http://www.knowsky.com 
'/*************************
'/ 属性设置说明

'/ foldename "文件夹名"
'/ 如果不设置,将自动生成[年月日]时间格式的文件夹名

'/ Filename "文件名"(含前后缀) 
'/ 如果不设置,将自动生成[时分秒]时间格式的文件名,后缀为.html

'/ Htmlstr "生成的代码内容"
'/*************************


Private HtmlFolder,HtmlFilename,HtmlContent

Public property let foldename(str)
HtmlFolder=str
End property

Public property let Filename(str)
HtmlFilename=str
End property

Public property let Htmlstr(str)
HtmlContent=str
End property

'/*************************
'/ 文件名转换日期函数
'/*************************

    Private Function Datename1(timestr)
        dim s_year,s_month,s_day
        s_year=year(timestr)
        if len(s_year)=2 then s_year="20"&s_year
        s_month=month(timestr)
        if s_month<10 then s_month="0"&s_month
        s_day=day(timestr)
        if s_day<10 then s_day="0"&s_day
        Datename1=s_year & s_month & s_day
    End Function

    Private Function Datename2(timestr)
        dim s_hour,s_minute,s_ss
        s_hour=hour(timestr)
        if s_hour<10 then s_hour="0"&s_hour
        s_minute=minute(timestr)
        if s_minute<10 then s_minute="0"&s_minute
        s_ss=second(timestr)
        if s_ss<10 then s_ss="0"&s_ss
        Datename2 = s_hour & s_minute & s_ss
    End Function

'/*************************
'/ 初试化
'/*************************

    Private Sub class_initialize()
        HtmlFolder=Datename1(now)
        HtmlFilename=Datename2(now)&".html"
        HtmlC
    End Sub

    Private Sub class_terminate()
    End Sub


'/*************************
'/ Html文件生成
'/*************************

    Public Sub Htmlmake()
    '    On Error Resume Next
        dim filepath,fso,fout
        filepath = HtmlFolder&"/"&HtmlFilename
        Set fso = Server.CreateObject("Scripting.FileSystemObject")
        If fso.FolderExists(Server.MapPath(HtmlFolder)) Then
        Else
        fso.CreateFolder(Server.MapPath(HtmlFolder))
        End If
    '    Set fout = fso.CreateTextFile(Server.MapPath(filepath),true)
    '    fout.WriteLine HtmlContent
    '    fout.close
        dim objFSO,adTypeText,adSaveCreateOverWrite,Charsett,objAdoStream
        Charsett = "utf-8"
        set objAdoStream = Server.CreateObject("ADODB.Stream")
        adTypeText  = 2
        adSaveCreateOverWrite = 2
        objAdoStream.Type = adTypeText
        objAdoStream.Open
        objAdoStream.Charset = Charsett
        objAdoStream.WriteText(HtmlContent)
        objAdoStream.SaveToFile Server.MapPath(filepath),2
        objAdoStream.Close
    End Sub

'/*************************
'/ Html文件删除
'/*************************


    Public Sub Htmldel()
    dim filepath,fso
    filepath = HtmlFolder&"/"&HtmlFilename
    Set fso = CreateObject("Scripting.FileSystemObject")
    if fso.FileExists(Server.MapPath(filepath)) then
        fso.DeleteFile(Server.mappath(filepath))
    end if
    Set fso = nothing
    End Sub

End class


下面为了让大家更好的学习给出具体的举一个实例:

我们有一个网站地址是 http://www.knowsky.com/

我们要将其首页也就是default.asp生成静态的htm文件

我们先建立个文件:makeindex.asp

<!--#include file="function_class.asp"-->
<%
dim indexhtmlstr
indexhtmlstr=GetURL("
http://www.supersha.cn/index.asp")
dim indexfilename
indexfilename="index.htm"
dim actionstat
if len(indexhtmlstr) <200 then
    acti&indexfilename&"文件时遇到"&indexhtmlstr&"错误"
else
    dim myhtml
    set myhtml= new Htmlmaker
    myhtml.foldename = "../.." 
    myhtml.Filename = indexfilename
    myhtml.Htmldel
    myhtml.Htmlstr = indexhtmlstr
    myhtml.Htmlmake
    set myhtml=nothing
    acti&indexfilename&"文件"
end if
response.write actionstat
%>


文件function_class.asp的内容主要包括前面给出的函数和生成文件的类就可以了!
运行makeindex.asp就可以生成htm文件了!

================================================================================================

asp利用xmlhttp抓取特定网页内容例子

asp利用xmlhttp抓取特定网页内容例子

asp抓取网页。偶要实现实实更新天气预报。利用了XMLHTTP组件,抓取网页的指定部分。很多小偷查询都是使用这个方法来实现的。

需要分件html源代码

此例中的被抓取的html源代码如下

<p align=left>2004年8月24日星期二;白天:晴有时多云南风3—4级;夜间:晴南风3—4级;气温:最高29℃最低19℃ </p>

而程序中是从以2004年8月24日为关键字搜索,直到</p>结速

而抓取的内容就变成了"2004年8月24日星期二;白天:晴有时多云南风3—4级;夜间:晴南风3—4级;气温:最高29℃最低19℃ "

干干净净的了。记录一下。

<% 
'中国asp之家 
On Error Resume Next 
Server.ScriptTimeOut=9999999 
Function getHTTPPage(Path) 
        t = GetBody(Path) 
        getHTTPPage=BytesToBstr(t,"GB2312") 
End function 
Function GetBody(url)  
        on error resume next 
        Set Retrieval = CreateObject("Microsoft.XMLHTTP")  
        With Retrieval  
        .Open "Get", url, False, "", ""  
        .Send  
        GetBody = .ResponseBody 
        End With  
        Set Retrieval = Nothing  
End Function 
Function BytesToBstr(body,Cset) 
        dim objstream 
        set objstream = Server.CreateObject("adodb.stream") 
        objstream.Type = 1 
        objstream.Mode =3 
        objstream.Open 
        objstream.Write body 
        objstream.Position = 0 
        objstream.Type = 2 
        objstream.Charset = Cset 
        BytesToBstr = objstream.ReadText  
        objstream.Close 
        set objstream = nothing 
End Function 
Function Newstring(wstr,strng) 
        Newstring=Instr(lcase(wstr),lcase(strng)) 
        if Newstring<=0 then Newstring=Len(wstr) 
End Function 
%> 
<html> 
<BODY bgColor=#ffffff leftMargin=0 topMargin=0 MARGINHEIGHT=0 MARGINWIDTH=0> 
<!-- 开始 -->     
<% 
Dim wstr,str,url,start,over,dtime 
dtime=Year(Date)&"年"&Month(Date)&"月"&Day(Date)&"日" 
url="http://www.qianhuaweb.com/" 
        wstr=getHTTPPage(url) 
        start=Newstring(wstr,dtime) 
        over=Newstring(wstr,"</p>") 
 body=mid(wstr,start,over-start) 
response.write "<MARQUEE οnmοuseοver=this.stop(); οnmοuseοut=this.start();>"&body&"</marquee>" 

%> 
<!-- 结束 --> 
</body></html>

==============================================================================================

XmlHttp对象及其应用 

XmlHttp对象及其应用

XmlHttp对象及其应用 
关键词:Http协议,Xml,Web服务器
简介:XmlHttp对象是微软的MSXML库中的一个对象,通过这个对象我们能够通过Http协议
向远程的Web服务器发送数据,并能够接收Web服务器返回回来的数据。 


1、什么是XmlHttp?
XmlHttp是一个COM对象,位于微软的MSXML对象库中,我们也可以简单的把它理解为一系列的API,总之它为我们提供了很多的方法。
从单词本身的意义上看,该对象肯定与Xml有关,也与Http协议有关,这是对的。以至于我当初的理解就是,该对象只能通过Http协议发送和接收Xml数据。
其实,不仅如此,XmlHttp对象还能够通过Http协议向一些Web应用(不但Web Server,还可以是Web Service 甚至一些数据库接口)发送和接收一些文本数据甚至二进制的数据。
所以在现在的应用当中,如果要作基于Http协议的开发,我们通常会使用它。 

2、XmlHttp对象的基本用法。
XmlHttp对象包括以下几个主要的方法:

open 


Open方法通过相关的参数,初始化一个Http请求,Open方法的参数如下

XmlHttp.Open(strMethod, strUrl, varAsync, strUser, strPassword) strMethod参数决定该次Http请求的执行方式,包括Get,Post,Head等等,具体可参考Http 1.1协议 
strUrl 是发起Http请求的Url地址 
varAsync 同步异步方式,这是一个可选参数,但是默认是True,也就是异步方式,也就是说程序不会等到 
该Http请求结束就继续往下执行了。 
strUser和strPassword 这两个参数也是可选的,是在请求一些需要验证的Url时需要的

setRequestHeader

该方法可以确定需要传输的Http Header信息,包含两个参数,一个是Header 名字,一个是值
比如 setRequestHeader("Host:","
www.supersha.cn")

send
在经过Open方法初始化一个Http请求,和经过setRequestHeader方法设置好头信息(当然这一步经常是不需要的)
以后,就可以通过send方法,向服务器具体说就是那个Url地址发起Http请求了。

getAllResponseHeaders
该方法能够得到所有返回的Http头信息 

abort 
该方法取消和终止当前的Http请求。

那在发完了Http请求之后,我们怎么能够得到该请求的返回信息呢? 用下面这几个属性吧,注意这些属性都是只读的, 也就是说你不能够给他们赋值。

ResponseText 
该属性返回Http请求的全部文本信息,而并不处理这些信息,注意默认是以UTF-8编码返回的,这也是为什么在显示中文时,我们还需要做一些处理。

ResponseBody
ResponseXml

如果你请求的Url是个标准的XML文件的话,那么就可以用该属性,配合XMLDOM对象就可以处理Xml了。 这里需要注意的是,如果你是通过程序生成的Xml(比如现在好多的RSS),那么你必须在输出时指定头信息为text/xml
在Asp中用Response.ContentType方法, 否则ResponseXML将会是空值。

ResponseStream 
以二进制数据的方式返回数据,用这个方法就可以直接下载文件了。

说了这么多,下面是一个最简单的XmlHttp对象的使用方法,这是在Asp中使用的: 

<% 
Dim objXMLHTTP 
set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP") 
objXMLHTTP.Open "GET", "
http://www.supersha.cn", false 
objXMLHTTP.Send 
Response.Write "<xmp>"
Response.Write objXMLHTTP.ResponseText
Response.Write "</xmp>"
%> 



3、应用举例之一--无刷新的数据显示
其实网上所说的无刷新数据显示,并不是不刷新,而是局部刷新。
以前我们做聊天室的时候,每隔几秒钟刷新一下整个页面,这样看起来很不舒服。
记得以前为北京市交管局做了一套《路口违章数据的自动回传和实时监控系统》,在一个IE浏览器里
分四个窗口,每个窗口显示一个路口的实时图像,这就要求每1秒钟各个小窗口要独自刷新图片(图片 
是通过电话线从路口的工控机上传回来的),最后就是用XmlHttp对象实现的,效果还非常不错。


这里就不写代码了,主要依靠客户端的XmlHttp对象和Javascript来实现,大体思路是这样

<script language="javascript">
function getUrl() //取数据
{
var objXml = new ActiveXObject("Microsoft.XMLHTTP"); 
....
//取回数据之后在页面上显示
document.aaa.innerText=
}
setTimeOut(getUrl,1000);
</script> 



4、应用举例之二--获取其它网站的数据
用XmlHttp来获取其它网站的数据,是我们现在用到的最多的,比如一些新闻小偷啦、天气预报小偷啦股票查询、车次查询啦等等,总之就是从他人的网站上获取数据。
这里,给大家一段写好的函数,可以直接拿过来使用,比如我想要抓取 http://www.toprosoft.com 的首页,在Asp中就可以这样

<%=OpenUrl("
http://www.supersha.cn")%>

另外的例子,就是我写的一个《抓取动网论坛 Email 地址的一段代码 》文章,

大家在这里可以找到,http://blog.csdn.net/cqq/archive/2005/07/20/429923.aspx

Function OpenUrl(strUrl) 
Dim xmlhttp
on Error Resume Next
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET",(strUrl ),false
xmlhttp.send 
OpenUrl=bytes2BSTR(xmlhttp.ResponseBody) 
Set xmlhttp = Nothing 
End Function 

Function bytes2BSTR(vIn)
Dim i
Dim strReturn
Dim ThisCharCode
Dim 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值