当前位置: 首页 > 图文教程 > 网络编程 > ASP > 采集原理---采集技术篇---XMLHTTP

ASP
分享一段代码show.asp?id=26变成show/?26的形式
多域名一网站时如果返回最原来的域名
[原创]完美解决ASP 不能更新。数据库或对象为只读。
5天学会asp
TSYS中生成静态页时溢出: ''CInt''
对象标记具有无效的 ''MSWC.MyInfo'' ProgID
[原创]随机增加网站点击的一个不错的方法
Microsoft JET Database Engine 错误 ''80004005'' 未指定的错误的完美解决方法
反SPAM新思路—换Z-BLOG的验证码!
七步倒┈→专用asp后门
asp下实现代码的“运行代码”“复制代码”“保存代码”功能源码
使用ASP实现网站的“目录树”管理的代码
ShowPage 显示“上一页 下一页”等信息的封装代码
[原创]站长感慨asp编程究竟何去何从
响应对象 错误 ''ASP 0185 : 80020003'' 缺少默认属性
[原创]asp下用实现模板加载的的几种方法总结
[原创]asp获取URL参数的几种方法分析总结
Access数据库中“所有记录中均未找到搜索关键字”的解决方法
ASP程序中输出Excel文件实例一则
ASP应用中如何限制同一表单被多次提交

ASP 中的 采集原理---采集技术篇---XMLHTTP


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 204 ::
收藏到网摘: n/a

最近一段时间,采集很热门,从新闻小偷,到音乐小偷,到新闻采集,Flash采集,都有他的踪影,现在还有很多的人对采集都很感兴趣,为了服务大家,我也正在写一套采集程序,名字为 心意采集程序 ,现在我讲一下,采集用到的相关技术。

下面讲到的也不是很高深的XMLHTTP技术,我也是稍稍讲一下,一个采集需要用到的几块内容
如果你需要了解更多的问题,请去www.google.com 搜索 XMLHTTP 技术 你将会得到更多的帮助,如果大家有什么疑问的话,可以在论坛上回贴
下面只讲到如何在网上得到数据,并不涉及到数据处理
第一 XMLHTTP 技术
http://www.0579.info/study/exploitation/net/58685.htm
上面那个地址,那篇文章讲的根本原理已经很详细了,但是我们一般采集的话,刚开始不太需要了解太多。只要实用就可以了,等以后不够用的时候,再去找相关文档也来得急
首先,我们需要建立一个XMLHTTP对象
微软发布的xmlhttp组件已经有很多的版本了,我知道的就有以下几种:
"MSXML2.ServerXMLHTTP.4.0"
"MSXML2.ServerXMLHTTP.3.0"
"MSXML2.ServerXMLHTTP"
"MSXML2.XMLHTTP.5.0"
"MSXML2.XMLHTTP.4.0"
"MSXML2.XMLHTTP.3.0"
"MSXML2.XMLHTTP"
"Microsoft.XMLHTTP

以上有这么多种组件,我们当然是需要申请最高版本的对象喽,那有什么办法可以实现呢
下面我拿出一段代码,大家可以看看,他是按最高版本申请XMLHTTP对象的
Dim ArrProgId,Prog,Flag,XmlHttpCom
ArrProgId = array("MSXML2.ServerXMLHTTP.4.0", "MSXML2.ServerXMLHTTP.3.0", "MSXML2.ServerXMLHTTP", "MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP","Microsoft.XMLHTTP")
For Each Prog In arrProgId
If (IsObjInstalled(Prog) = true) Then
XmlHttpCom = Prog
Exit For
End If
Next

'// <summary>
'// Rem 检查组件是否支持 是返回 True 否返回 False
'// </summary>
Public Function IsObjInstalled(strClassString)
On Error Resume Next
'//设置初始化值
IsObjInstalled = False
Err = 0
'//测试代码
Dim xTestObj
Set xTestObj = Server.createObject(strClassString)
If 0 = Err Then IsObjInstalled = True
'//清除所申请的对象
Set xTestObj = Nothing
Err = 0
End Function

上面那段代码就是申请到当前服务器支持的最高版本的XMLHTTP对象了
下面我们讲一下采集功能函数

'GetFileText为采集功能函数
Public Function GetFileText(url)
on error resume next '有错误时继续执行代码
Dim http '定义变量
'Set http=Server.createobject(XmlHttpCom) '申请对象
Set http=Server.createobject("Microsoft.XMLHTTP") '保险起见,写出一个服务器一般都支持的版本
Http.open "GET",url,False '打开对象 用GET方式 等待服务器响应
Http.Send() '发送
If Http.readystate<>4 Then '如果服务器没反应,则退出函数
Exit Function
End If
GetFileText=bytes2BSTR(Http.responseBody,"GB2312") '把得到的数据流二进制文件 转化成文本字符格式 (GB2312)
Set http=Nothing '删除对象
If err.number<>0 Then err.Clear '如果有错误,清除错误
End Function

'// <summary>
'// 采用 ADODB.Stream 处理采集到的数据,把二进制的文件转成文本字符
'// </summary>
Function Bytes2bStr(vin,cSet)
Dim BytesStream,StringReturn
Set BytesStream = Server.createObject("ADODB.Stream")
BytesStream.Type = 2
BytesStream.Open
BytesStream.WriteText vin
BytesStream.Position = 0
BytesStream.CharSet = cSet
BytesStream.Position = 2
StringReturn =BytesStream.ReadText
BytesStream.close
Set BytesStream = Nothing
Bytes2bStr = StringReturn
End Function

下面我定义一个 路径变量 URL
URL = "http://ent.sina.com.cn/star/mainland/more.html";
上面是一个网址,如果我们想把上面这个地址采集下来,并显示出来的话,我们可以这样操作

URL = "http://ent.sina.com.cn/star/mainland/more.html";
Response.Write GetFileText(URL)

这样就可以采集到上面网址的内容了
是不是很简单呢
那采集到数据之后应该怎么操作呢
怎么区分数据,如果得到你想要的数据,如果把得到的数据入库呢
这是以后需要分析讲解的问题了 入库要注意的地方,用正表达式处理数据

附上 上面代码的源文件,大家可以下载下去,运行起来试试,是不是真的能采集到数据库