当前位置: 首页 > 图文教程 > 网络编程 > ASP > 网站生成静态页面攻略2:数据采集

ASP
构建你的网站新闻自动发布系统之三
构建你的网站新闻自动发布系统之四
如何用ASP编写网站统计系统一
如何用ASP编写网站统计系统二
如何用ASP编写网站统计系统三
如何用ASP编写网站统计系统四
ASP Error 0115的一些解决办法
ASP 3.0 新特色先睹为快(一)
ASP 3.0 新特色先睹为快(二)
ASP主件中的安全问题
一个汉字转成拼音的代码
使用w3Sockets组件实现域名查询功能
ASP中实现文件上传方法的研究
构建免受FSO组件威胁虚拟主机
用XMLHTTP做一个自己特色的Google
用asp实现的代码批量修改程序
无组件的数据库的备份与还原
用ASPJPEG组件制作图片的缩略图和加水印
解密ASP源代码
XmlHttp异步获取网站数据的例子

ASP 中的 网站生成静态页面攻略2:数据采集


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

采集原理:
采集程序的主要步骤如下:
一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的ASP常用获取被采集的页面的内容方法:
1、用serverXMLHTTP组件获取数据

Function GetBody(weburl)
'-----------------翟振恺(小琦)
'创建对象
Dim ObjXMLHTTP
Set ObjXMLHTTP=Server.CreateObject("MSXML2.serverXMLHTTP")
'请求文件,以异步形式
ObjXMLHTTP.Open "GET",weburl,False
ObjXMLHTTP.send
While ObjXMLHTTP.readyState <> 4
ObjXMLHTTP.waitForResponse 1000
Wend
'得到结果
GetBody=ObjXMLHTTP.responseBody
'释放对象
Set ObjXMLHTTP=Nothing
'-----------------翟振恺(小琦)
End Function
调用方法:GetBody(文件的URLf地址)
2、或XMLHTTP组件获取数据

Function GetBody(weburl)
'-----------------翟振恺(小琦)
'创建对象
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
With Retrieval
.Open "Get", weburl, False, "", ""
.Send
GetBody = .ResponseBody
End With
'释放对象
Set Retrieval = Nothing
'-----------------翟振恺(小琦)
End Function
调用方法:GetBody(文件的URLf地址)
这样获取的数据内容还需要进行编码转换才可以使用

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
调用方法:BytesToBstr(要转换的数据,编码)'编码常用为GB2312和UTF-8。
二、从获取代码中提取所有用的数据
1、用ASP内置的MID函数截取需要的数据

Function body(wstr,start,over)
'-----------------翟振恺(小琦)
start=Newstring(wstr,start)
'设置需要处理的数据的唯一的开始标记
over=Newstring(wstr,over)
'和start相对应的就是需要处理的数据的唯一的结束标记
body=mid(wstr,start,over-start)
'设置显示页面的范围
'-----------------翟振恺(小琦)
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
2、用正则获取需要的数据

Function body(wstr,start,over)
'-----------------翟振恺(小琦)
Set xiaoqi = New Regexp'设置配置对象
xiaoqi.IgnoreCase = True'忽略大小写
xiaoqi.Global = True'设置为全文搜索
xiaoqi.Pattern = "”&start&“.+?”&over&“"'正则表达式
Set Matches =xiaoqi.Execute(wstr)'开始执行配置
set xiaoqi=nothing
body=""
For Each Match in Matches
body=body&Match.Value '循环匹配
Next
'-----------------翟振恺(小琦)
End Function
调用方法:body(被采集的页面的内容,开始标记,结束标记)
采集程序祥细思路:
1、取得网站的分页列表页的每页地址
目前绝大部分动态网站的分页地址都有规则,如:
动态页
第一页:index.asp?page=1
第二页:index.asp?page=2
第三页:index.asp?page=3
.....

静态页
第一页:page_1.htm
第二页:page_2.htm
第三页:page_3.htm
.....
取得网站的分页列表页的每页地址,只需要用变量替代每页地址的变化的字符即可如:page_<%="&page&"%>.htm
2、获取被采集网站的分页列表页内容
3、从分页列表代码中提取被采集的内容页面的URL连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:

<a href="url1">连接1</a> <br>
<a href="url2">连接2</a> <br>
<a href="url3">连接3</a> <br>
用以下代码就可以获得一个URL连接集合

'-----------------翟振恺(小琦)
Set xiaoqi = New Regexp
xiaoqi.IgnoreCase = True
xiaoqi.Global = True
xiaoqi.Pattern = ””“.+?”““
Set Matches =xiaoqi.Execute(页面列表内容)
set xiaoqi=nothing
url=""
For Each Match in Matches
url=url&Match.Value
Next
'-----------------翟振恺(小琦)
4、取得被采集的内容页面内容,根据”提取标记“从被采集的内容页面分别截取要取得的数据。
因为是动态生成的页面,大多数内容页面内都有相同的html标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。如:
每个页面都有网页标题<title>网页标题</title>,用我上面写的MID截取函数就可以获得<title></title>之间的值,也可以用正则表达式来获得。
例:

body("<title>网页标题</title>","<title>","</title>")