当前位置: 移动技术网 > IT编程>开发语言>Asp > 采集原理---采集技术篇---XMLHTTP

采集原理---采集技术篇---XMLHTTP

2017年12月12日  | 移动技术网IT编程  | 我要评论
最近一段时间,采集很热门,从新闻小偷,到音乐小偷,到新闻采集,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)


这样就可以采集到上面网址的内容了
是不是很简单呢

那采集到数据之后应该怎么操作呢
怎么区分数据,如果得到你想要的数据,如果把得到的数据入库呢
这是以后需要分析讲解的问题了 入库要注意的地方,用正表达式处理数据


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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网