常常我们在使用一键转播复制等等技术的时候都用到数据采集,其中包含了将文字和图片保存到我们自己的服务器.
无论是ASP、Asp.net、PHP、JSP使用原理和基本思路都是一样,不同的在于使用各自实现的语法。
一、实现原理
1、首先是将一个被采集的HTML页面中提取所有我们需要的数,比如:标题,关键字,内容等等。
2、提取了HTML页面中我们需要的内容后,要进行处理,比如我们需要采集内容中的图片,将其保存到自己的服务器上,要把链接变成自己网站的链接。
3、讲所有数据保存到数据库中。实现你网站的其他接入。
二、实现代码(Asp为列)
代码可能是被我们封装成了一个函数,到时候调用就行了,只需要向函数传递需要的参数。
1、获取HTML页面内容的函数
我们通过浏览器浏览得到的HTML页面从源文件都是可以看见的中文编码的字符,但是我们做采集不可能是将得到的html字符在从浏览器上发送到服务器上去,当然这种个思路是可以实现的,但是很复杂。那么通过什么方法呢?很简单ASp的Msxml.xmlhttp、Msxml2.xmlhttp、MSXML2.SERVERXMLHTTP.3.0 这些组建就能帮我们实现,使用一个即可,三个组建的区别你可以百度一下。
在服务端对数据的分析不像是客户端一样看到的是HTML文字,服务端只能得到数据和发送数据(要么是二进制的流文件数据,要么就是普通的字符数据。)
第一个函数,取得HTML的流文件(也就是二进制的数据)
Function GetHtml(httpurl)
Dim xmlhttp,xmli,xmlHTML
'Set xmlhttp = Server.CreateObject("Msxml2.xmlhttp")
Set xmlhttp = createobject("MSXML2.SERVERXMLHTTP.3.0")
'xmlHttp.setRequestHeader "Accept-Charset", "gb2312"
'xmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
IF IsArray(httpurl) Then
Redim xmlHTML(Ubound(httpurl))
For xmli=0 To Ubound(httpurl)
xmlhttp.Open "GET",httpurl(xmli),false
xmlhttp.Send()
IF (xmlhttp.readystate=4) Then
IF (xmlhttp.status=200) Then
xmlHTML(xmli) = xmlhttp.responseBody
Echo "第 "& xmli+1 &" 条数据源采集成功!
"
Else
xmlHTML(xmli) = 0
Echo "抱歉,采集出现错误,错误代码:"&xmlhttp.status&"
"
End IF
Else
Echo "抱歉,采集地址上网络错误。代码:"&xmlhttp.readystate&"
"
End IF
Next
Else
xmlhttp.Open "GET",httpurl,false
xmlhttp.Send()
IF (xmlhttp.readystate=4 And xmlhttp.status=200) Then
xmlHTML = xmlhttp.responseBody
Else
Echo "网络数据读取错误!错误代码:" & xmlhttp.status
End IF
End IF
GetHtml = xmlHTML
Set xmlhttp = Nothing
End Function
此函数返回的是一个页面的html二进制流。
它可以有2个用途,取决于我们传递的参数 httpurl :
1.如果参数一个网页的页面地址,可以返回文字二进制流数据
2.如果是一个图片的地址,可以返回 图片的二进制流
使用方法:
httpurl 参数字符串或者数组,其值只能是网页地址或者图片地址,必须包含http://
函数返回值取决于参数传入类型
httpurl是一个http://的网页或图片地址,返回的将是一个二进制流数据,
httpurl是一个数组,则返回的也是一个含有二进制数据的数组.
如果出现了404错误,那么返回数据就是 0 .
得到了HTML二进制源文件,我们需要对其按类型处理,
如果是html网页,那么就转化为可是别的字符.如果是图片我们就保存为图片.