你也可以做“小偷”

网络通信

  看到这个标题大家可千万别误会,这里所说的“小偷”指的是在ASP中运用XML中XMLHTTP组件把远程网站上的数据(图片、网页及其他文件)抓取到本地,再经过程序处理后直接显示到页面上或存储到数据库的程序。

  “小偷”程序的利与弊

  优点:无须维护网站,因为“小偷”程序中的数据来自其他网站,它将随着该网站的更新而更新。

  缺点:不稳定,如果目标网站出错,程序也会出错;因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。

  程序代码

  Alexa世界排名是由Alexa.com网站联合著名搜索引擎Google,根据从安装了Alexa工具条的用户反馈回来的数据形成的全球网站排名表。

  能不能快速得到某个网站的世界排名呢?答案是肯定的,如下代码就可以实现用户在输入框内手动输入一个需要查询的网站地址,提交后程序将自动显示该网站的世界排名。

  程序演示地址:http://www.gtocn.com/alexa.asp

  <%

  On Error Resume Next

  Server.ScriptTimeOut=9999999

  Function getHTTPPage(Path)

  t = GetBody(Path)

  getHTTPPage=BytesToBstr(t,"GB2312")

  End function

  '首先,进行“小偷”程序的初始化设置,以上代码的作用分别是忽略掉所有非致命性错误,把小偷程序的运行超时设置得很长(这样不会出现运行超时的错误);将原来默认的UTF-8编码转换成GB2312编码,否则打开含有中文字符的网页将是乱码。

  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

  '然后调用XMLHTTP组件创建一个对象,并进行初始化设置。

  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

  '处理抓取回来的数据时需要调用adodb.stream组件,并进行初始化设置。

  Function Newstring(wstr,strng)

  Newstring=Instr(lcase(wstr),lcase(strng)) 

  if Newstring<=0 then Newstring=Len(wstr)

  End Function

  '定义一个数据变量。

  %>

  '以下即为页面显示部分。

  <title>Alexa 世界排名查询程序 by 重庆森林</title>

  <form method="get" action="alexa.asp">

  <input name="domain">

  <input type="submit" value="查询PR值"> </form>

  '设置输入框提交给程序的变量名。

  <%

  Dim wstr,str,url,start,over,id

  '定义一些需要使用到的变量。

  id = Request.QueryString("domain")

  '程序传回的domain变量(即用户输入的需要查询的网站地址),并赋给ID。

  url="http://www.alexa.com/data/detai

  ls/?url="&id&""

  '这里设置需要抓取的页面地址,当然你也可以直接指定某个地址,而不使用变量。

  wstr=getHTTPPage(url)

  '获取指定页面的全部数据 start=Newstring(wstr,"<span class=""body""> Traffic Rank for")

  '这里设置需要处理的数据的头部,这个变量应视不同情况而设置,具体内容可以通过查看需要抓取的页面的源代码来确定。在这个程序里我们只需要抓取世界排名的数据即可。

  over=Newstring(wstr,"See Traffic Details</a></span>")

  '和start相对应的就是需要处理的数据的尾部。同样,设置的内容必须是页面中惟一的。

  body=mid(wstr,start,over-start)

  '设置显示页面的范围。

  '下面就是动用乾坤挪移大法的时候了,通过replace函数替换掉了数据中指定的字符。

  body = replace(body,"Traffic Rank for ","您的网站: "&id&" 世界排名是<strong><font color=red>")

  body = replace(body,"See Traffic Details","查看详细资料")

  '本程序中已经完成了替换的工作,如果有其他需要的话可以继续进行类似的替换操作。

  response.write body

  '替换完需要修改的内容后,就可以把修改的内容显示在页面上了。

  %>

  至此程序结束。

  使用方法

  把上述代码去掉说明部分后,保存为alexa.asp,再上传到支持ASP和XML的空间,并在浏览器中运行,然后在输入框中输入需要查询的网站地址(注意不能带http://或者其他协议的前缀)。提交后,页面上会显示类似“您要查询的网站:XXXX.com:63,580”的内容,63580即为该网站的世界排名。大家还可以在这个程序的基础上进行进一步的界面美化或者程序优化。

  大家如果有任何疑问可以到我们的论坛(http://www.im286.com)进行沟通交流。