
2009-9-15 23:32
Javascript实现经典的图片切换效果
css 滤镜 : Pixelate
Pixelate兼容性:IE5.5+
语法:
filter : progid:DXImageTransform.Microsoft.Pixelate ( enabled=bEnabled , duration=fDuration , maxSquare=iWidth )
属性
enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false true : 默认值。滤镜激活。
false : 滤镜被禁止。
duration : 可选项。浮点数(Real)。设置或检索转换完成所用的时间。其值为秒.毫秒(0.0000)格式。
你可以使用 play 方法的 iDuration 参数设置转换回放的持续时间。然而,当你一旦调用了 play 方法,在回放持续过程中 Duration 特性就变为只读特性。
maxSquare : 可选项。整数值(Integer)。设置或检索转换中矩形色块的最大宽度。取值范围为 2 - 50 。默认值为 50 。
特性:
Enabled : 可读写。布尔值(Boolean)。参阅 enabled 属性。
Duration : 可读写。浮点数(Real)。参阅 duration 属性。
MaxSquare : 可读写。整数值(Integer)。参阅 maxSquare 属性。
Percent : 可读写。字符串(String)。设置或检索当前静态滤镜输出在转换进程中所处的点。取值范围为 0 - 100 。默认值为 0 ,转换尚未开始。 100 为转换完成。
此特性可用于使用转换滤镜建立静态滤镜效果。设置其值等于定义了转换进程停止的点。使用转换滤镜建立静态滤镜效果可遵循以下步骤:
使用转换滤镜的 apply 方法。这将捕获对象内容的初始显示,设置 Percent 特性值为 0 。
改变对象内容。如 visibility , innerText , background-color , border ,或者其子对象的属性。
设置转换滤镜的 Percent 特性。即确定你希望的转换进程中某一点。这将捕获到转换进程中在该点处的一张内容图像。
设置转换滤镜的 Enabled 特性值为 true 。则滤镜作用的对象将依据获取到的图像更新其内容。
请注意:你只能使用 visibility 属性来改变对象的子对象。否则,对子对象的直接改变会被立即显示出来,而不会被转换滤镜捕获。
status : 只读。整数值(Integer)。检索转换的当前状态。0 | 1 | 2 0 : 转换停止(stop)。
1 : 转换被应用(apply)。
2 : 转换在进行(play)。
方法:
apply : 捕获对象内容的初始显示,为转换做必要的准备。无返回值。
当此方法一旦被调用后,对象属性的任何改变都不会被显示,直到你调用 play 方法开始转换。
请注意:你只能使用 visibility 属性来改变对象的子对象。否则,对子对象的直接改变会被立即显示出来,而不会被转换滤镜捕获。
当你调用 play 方法时,转换呈现出内容的变化结果(对象的属性和子对象的 visibility 属性的改变)。
play ( iDuration ) : 开始转换。无返回值。参数见下表。
iDuration : 可选项。浮点数(Real)。 指定滤镜作用持续的时间。默认单位为秒。
使用 play 方法的 iDuration 参数设置转换回放的持续时间,其值在转换的当前一个周期内会替换 Duration 属性的设置。但是下一次转换会恢复使用 Duration 属性设置的值。
stop : 停止转换回放。并呈现转换结果图像。同时激发 onfilterchange 事件。无返回值。
说明:
这个转换滤镜是一个复杂的视觉效果。在转换的前半段,对象内容先显示为矩形色块拼贴,然后矩形的宽度由一个像素增加至 MaxSquare 属性所设置的值。每个矩形的颜色由其所覆盖区域的像素的颜色平均值决定。接下来的转换的后半段,矩形被还原为新内容具体的图像像素,显示出新的内容。
在使用此转换滤镜前设置此滤镜的 Enabled 特性值为 false 。这将预防在转换发生前彩色拼贴效果的静态滤镜先在对象内容上发生作用。
运行代码框
<html xmlns:rdl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Rainer's Handbook</title>
<style>
body{margin:0px;padding:16px;background:#FFFFFF;overflow:auto;}
body,table,input,select,textarea,a{font-family:verdana,tahoma,arial;font-size:11px;color:#000000;word-break:break-all;}
table,img{border:0px;}
a{text-decoration:none;color:#003399;}
a:hover{color:#000000;text-decoration:underline;}
#id_div3{padding-top:8px;border-top:1px solid #000000;line-height:15px;}
#id_span3{font-size:10px;font-family:tahoma;}
</style>
<style>
#idParentDiv{width:100%;height:120px;padding:6px;background-color:buttonshadow;position:relative;filter:progid:DXImageTransform.Microsoft.Pixelate(enabled="false");}
#idDiv1{width:200px;height:100px;background-color:#000000;color:#FFFFFF;padding:4px;position:absolute;z-index:3;visibility:hidden;}
#idDiv2{width:200px;height:100px;background-color:#000000;color:#FFFFFF;padding:4px;position:absolute;z-index:4;visibility:visible;}
#idCodeDiv{width:100%;padding:4px;font-family:verdana,tahoma;margin:12px 0px 0px 0px;background-color:#EEEEEE;font-weight:bold;}
</style>
<script>
var sBaseStr="filter : progid:DXImageTransform.Microsoft.Pixelate ( ";
var oParentDiv,oCodeDiv;
function rdl_doInit(e){
oParentDiv=document.all("idParentDiv");
oCodeDiv=document.all("idCodeDiv");
rdl_play();
}
function rdl_change(e){
with (document.all("idSel1")) var sValue1=options[selectedIndex].value;
with (document.all("idSel2")) var sValue2=options[selectedIndex].value;
oCodeDiv.innerText=sBaseStr+",enabled="+oParentDiv.filters[0].enabled+",duration="+sValue1+",maxSquare="+sValue2+" ) ;";
with (oParentDiv.filters[0]) {
Duration=sValue1;MaxSquare=sValue2;
}
}
function rdl_play(){
with (oParentDiv) {
if (children[0].style.visibility=="hidden") children[1].style.visibility="visible";
else children[1].style.visibility="hidden";
filters[0].Apply();
if (children[0].style.visibility=="hidden") children[0].style.visibility="visible";else children[0].style.visibility="hidden";
if (children[1].style.visibility=="hidden") children[1].style.visibility="visible";else children[1].style.visibility="hidden";
filters[0].play();
}
}
window.onload=rdl_doInit;
</script>
</head>
<body>
<div id=idParentDiv>
<div id=idDiv1><img src="http://www.blueidea.com/articleimg/bbsimg/topic5.gif" style="float:left;border:1px solid #FFFFFF;">我是合成滤镜获取的输入<b> A </b>。</div>
<div id=idDiv2><img src="http://www.blueidea.com/articleimg/bbsimg/reply5.gif" style="float:left;border:1px solid #FFFFFF;">我是合成滤镜获取的输入<b> B </b>。</div>
</div>
<br>
<table><tr><td>
<select id=idSel1 onchange="rdl_change();">
<option value="0.5" style="font-weight:bold;">---Duration---
<option value="1">1
<option value="2">2
<option value="4">4
<option value="5">5
<option value="6">6
<option value="12">12
</select>
</td><td>
<select id=idSel2 onchange="rdl_change();">
<option value="50" style="font-weight:bold;">---MaxSquare---
<option value="25">25
<option value="10">10
<option value="5">5
</select>
</td><td>
<input type=button value=" Play " onclick="if (oParentDiv!=null) rdl_play();">
</td><td>
<input type=button value=" Stop " onclick="if (oParentDiv!=null) oParentDiv.filters[0].stop();">
</td></tr></table>
<br>
<div id=idCodeDiv>filter : progid:DXImageTransform.Microsoft.Pixelate (enabled="false")</div>
<br> <br> <br>
<div id=id_div3>苏昱作品·版权所有<br><span id=id_span3>©2002 Rainer Su . All rights reserved .</span></div>
</body>
</html>
forestgan写的效果如下:
<script language="JavaScript1.1">
var slidespeed=3000
//specify images
var slideimages=new Array("http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_1_7.jpg","http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_2_1.jpg","http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_3_2.jpg")
//specify corresponding links
var slidelinks=new Array("#","#","#")
var imageholder=new Array()
var ie55=window.createPopup
for (i=0;i<slideimages.length;i++){
imageholder[i]=new Image()
imageholder[i].src=slideimages[i]
}
function gotoshow(){
window.location=slidelinks[whichlink]
}
//-->
</script>
<a href="javascript:gotoshow()"><img src="http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_1_7.jpg" name="slide" border=0 style="filter:progid:DXImageTransform.Microsoft.Pixelate(MaxSquare=15,Duration=1)"></a>
<script language="JavaScript1.1">
<!--
var whichlink=0
var whichimage=0
var pixeldelay=(ie55)? document.images.slide.filters[0].duration*1000 : 0
function slideit(){
if (!document.images) return
if (ie55) document.images.slide.filters[0].apply()
document.images.slide.src=imageholder[whichimage].src
if (ie55) document.images.slide.filters[0].play()
whichlink=whichimage
whichimage=(whichimage<slideimages.length-1)? whichimage+1 : 0
setTimeout("slideit()",slidespeed+pixeldelay)
}
slideit()
//-->
</script>
css 滤镜 : Pixelate
Pixelate兼容性:IE5.5+
语法:
filter : progid:DXImageTransform.Microsoft.Pixelate ( enabled=bEnabled , duration=fDuration , maxSquare=iWidth )
属性
enabled : 可选项。布尔值(Boolean)。设置或检索滤镜是否激活。true | false true : 默认值。滤镜激活。
false : 滤镜被禁止。
duration : 可选项。浮点数(Real)。设置或检索转换完成所用的时间。其值为秒.毫秒(0.0000)格式。
你可以使用 play 方法的 iDuration 参数设置转换回放的持续时间。然而,当你一旦调用了 play 方法,在回放持续过程中 Duration 特性就变为只读特性。
maxSquare : 可选项。整数值(Integer)。设置或检索转换中矩形色块的最大宽度。取值范围为 2 - 50 。默认值为 50 。
特性:
Enabled : 可读写。布尔值(Boolean)。参阅 enabled 属性。
Duration : 可读写。浮点数(Real)。参阅 duration 属性。
MaxSquare : 可读写。整数值(Integer)。参阅 maxSquare 属性。
Percent : 可读写。字符串(String)。设置或检索当前静态滤镜输出在转换进程中所处的点。取值范围为 0 - 100 。默认值为 0 ,转换尚未开始。 100 为转换完成。
此特性可用于使用转换滤镜建立静态滤镜效果。设置其值等于定义了转换进程停止的点。使用转换滤镜建立静态滤镜效果可遵循以下步骤:
使用转换滤镜的 apply 方法。这将捕获对象内容的初始显示,设置 Percent 特性值为 0 。
改变对象内容。如 visibility , innerText , background-color , border ,或者其子对象的属性。
设置转换滤镜的 Percent 特性。即确定你希望的转换进程中某一点。这将捕获到转换进程中在该点处的一张内容图像。
设置转换滤镜的 Enabled 特性值为 true 。则滤镜作用的对象将依据获取到的图像更新其内容。
请注意:你只能使用 visibility 属性来改变对象的子对象。否则,对子对象的直接改变会被立即显示出来,而不会被转换滤镜捕获。
status : 只读。整数值(Integer)。检索转换的当前状态。0 | 1 | 2 0 : 转换停止(stop)。
1 : 转换被应用(apply)。
2 : 转换在进行(play)。
方法:
apply : 捕获对象内容的初始显示,为转换做必要的准备。无返回值。
当此方法一旦被调用后,对象属性的任何改变都不会被显示,直到你调用 play 方法开始转换。
请注意:你只能使用 visibility 属性来改变对象的子对象。否则,对子对象的直接改变会被立即显示出来,而不会被转换滤镜捕获。
当你调用 play 方法时,转换呈现出内容的变化结果(对象的属性和子对象的 visibility 属性的改变)。
play ( iDuration ) : 开始转换。无返回值。参数见下表。
iDuration : 可选项。浮点数(Real)。 指定滤镜作用持续的时间。默认单位为秒。
使用 play 方法的 iDuration 参数设置转换回放的持续时间,其值在转换的当前一个周期内会替换 Duration 属性的设置。但是下一次转换会恢复使用 Duration 属性设置的值。
stop : 停止转换回放。并呈现转换结果图像。同时激发 onfilterchange 事件。无返回值。
说明:
这个转换滤镜是一个复杂的视觉效果。在转换的前半段,对象内容先显示为矩形色块拼贴,然后矩形的宽度由一个像素增加至 MaxSquare 属性所设置的值。每个矩形的颜色由其所覆盖区域的像素的颜色平均值决定。接下来的转换的后半段,矩形被还原为新内容具体的图像像素,显示出新的内容。
在使用此转换滤镜前设置此滤镜的 Enabled 特性值为 false 。这将预防在转换发生前彩色拼贴效果的静态滤镜先在对象内容上发生作用。
运行代码框
<html xmlns:rdl>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Rainer's Handbook</title>
<style>
body{margin:0px;padding:16px;background:#FFFFFF;overflow:auto;}
body,table,input,select,textarea,a{font-family:verdana,tahoma,arial;font-size:11px;color:#000000;word-break:break-all;}
table,img{border:0px;}
a{text-decoration:none;color:#003399;}
a:hover{color:#000000;text-decoration:underline;}
#id_div3{padding-top:8px;border-top:1px solid #000000;line-height:15px;}
#id_span3{font-size:10px;font-family:tahoma;}
</style>
<style>
#idParentDiv{width:100%;height:120px;padding:6px;background-color:buttonshadow;position:relative;filter:progid:DXImageTransform.Microsoft.Pixelate(enabled="false");}
#idDiv1{width:200px;height:100px;background-color:#000000;color:#FFFFFF;padding:4px;position:absolute;z-index:3;visibility:hidden;}
#idDiv2{width:200px;height:100px;background-color:#000000;color:#FFFFFF;padding:4px;position:absolute;z-index:4;visibility:visible;}
#idCodeDiv{width:100%;padding:4px;font-family:verdana,tahoma;margin:12px 0px 0px 0px;background-color:#EEEEEE;font-weight:bold;}
</style>
<script>
var sBaseStr="filter : progid:DXImageTransform.Microsoft.Pixelate ( ";
var oParentDiv,oCodeDiv;
function rdl_doInit(e){
oParentDiv=document.all("idParentDiv");
oCodeDiv=document.all("idCodeDiv");
rdl_play();
}
function rdl_change(e){
with (document.all("idSel1")) var sValue1=options[selectedIndex].value;
with (document.all("idSel2")) var sValue2=options[selectedIndex].value;
oCodeDiv.innerText=sBaseStr+",enabled="+oParentDiv.filters[0].enabled+",duration="+sValue1+",maxSquare="+sValue2+" ) ;";
with (oParentDiv.filters[0]) {
Duration=sValue1;MaxSquare=sValue2;
}
}
function rdl_play(){
with (oParentDiv) {
if (children[0].style.visibility=="hidden") children[1].style.visibility="visible";
else children[1].style.visibility="hidden";
filters[0].Apply();
if (children[0].style.visibility=="hidden") children[0].style.visibility="visible";else children[0].style.visibility="hidden";
if (children[1].style.visibility=="hidden") children[1].style.visibility="visible";else children[1].style.visibility="hidden";
filters[0].play();
}
}
window.onload=rdl_doInit;
</script>
</head>
<body>
<div id=idParentDiv>
<div id=idDiv1><img src="http://www.blueidea.com/articleimg/bbsimg/topic5.gif" style="float:left;border:1px solid #FFFFFF;">我是合成滤镜获取的输入<b> A </b>。</div>
<div id=idDiv2><img src="http://www.blueidea.com/articleimg/bbsimg/reply5.gif" style="float:left;border:1px solid #FFFFFF;">我是合成滤镜获取的输入<b> B </b>。</div>
</div>
<br>
<table><tr><td>
<select id=idSel1 onchange="rdl_change();">
<option value="0.5" style="font-weight:bold;">---Duration---
<option value="1">1
<option value="2">2
<option value="4">4
<option value="5">5
<option value="6">6
<option value="12">12
</select>
</td><td>
<select id=idSel2 onchange="rdl_change();">
<option value="50" style="font-weight:bold;">---MaxSquare---
<option value="25">25
<option value="10">10
<option value="5">5
</select>
</td><td>
<input type=button value=" Play " onclick="if (oParentDiv!=null) rdl_play();">
</td><td>
<input type=button value=" Stop " onclick="if (oParentDiv!=null) oParentDiv.filters[0].stop();">
</td></tr></table>
<br>
<div id=idCodeDiv>filter : progid:DXImageTransform.Microsoft.Pixelate (enabled="false")</div>
<br> <br> <br>
<div id=id_div3>苏昱作品·版权所有<br><span id=id_span3>©2002 Rainer Su . All rights reserved .</span></div>
</body>
</html>
forestgan写的效果如下:
<script language="JavaScript1.1">
var slidespeed=3000
//specify images
var slideimages=new Array("http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_1_7.jpg","http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_2_1.jpg","http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_3_2.jpg")
//specify corresponding links
var slidelinks=new Array("#","#","#")
var imageholder=new Array()
var ie55=window.createPopup
for (i=0;i<slideimages.length;i++){
imageholder[i]=new Image()
imageholder[i].src=slideimages[i]
}
function gotoshow(){
window.location=slidelinks[whichlink]
}
//-->
</script>
<a href="javascript:gotoshow()"><img src="http://www.blueidea.com/articleimg/upload/2006/3/5/2482150_1_7.jpg" name="slide" border=0 style="filter:progid:DXImageTransform.Microsoft.Pixelate(MaxSquare=15,Duration=1)"></a>
<script language="JavaScript1.1">
<!--
var whichlink=0
var whichimage=0
var pixeldelay=(ie55)? document.images.slide.filters[0].duration*1000 : 0
function slideit(){
if (!document.images) return
if (ie55) document.images.slide.filters[0].apply()
document.images.slide.src=imageholder[whichimage].src
if (ie55) document.images.slide.filters[0].play()
whichlink=whichimage
whichimage=(whichimage<slideimages.length-1)? whichimage+1 : 0
setTimeout("slideit()",slidespeed+pixeldelay)
}
slideit()
//-->
</script>
采集程序的主要步骤如下:
一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的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连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:
连接1
连接2
连接3
用以下代码就可以获得一个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标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。
如:
每个页面都有网页标题,用我上面写的MID截取函数就可以获得之间的值,也可以用正则表达式来获得。
例:body("","")
一、获取被采集的页面的内容
二、从获取代码中提取所有用的数据
一、获取被采集的页面的内容
我目前所掌握的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连接地址
绝大部分分页页面里的内容页连接也有固定规则,如:
连接1
连接2
连接3
用以下代码就可以获得一个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标记,我们可以根据这些有规则的标记提取需要的各个部分的内容。
如:
每个页面都有网页标题,用我上面写的MID截取函数就可以获得之间的值,也可以用正则表达式来获得。
例:body("","")



