最近网上流行着一些采集程序,更多人拿着这些东西在网上叫卖,很多不太懂的人看着那些程序眼羡,其实如果你懂一些ASP,了解自动采集程序的原理后,你会感觉实现自动化也是那么的简单.
原理及优点:通过XML中的XMLHTTP组件调用其它网站上的网页,然后批量截取或替换原有的信息使其转化成变量后再一一储存到数据库中。其主要的优点便是无需再手工添加大量的信息了,可以指定对某一个站信息的截取进行批量录入,达到省时省力的目的。与其单纯的ASP小偷程序不同的是:它已经不再依赖其目标网站。
简单事例:
原理及优点:通过XML中的XMLHTTP组件调用其它网站上的网页,然后批量截取或替换原有的信息使其转化成变量后再一一储存到数据库中。其主要的优点便是无需再手工添加大量的信息了,可以指定对某一个站信息的截取进行批量录入,达到省时省力的目的。与其单纯的ASP小偷程序不同的是:它已经不再依赖其目标网站。
简单事例:
1
<
%
2 ' 声明取得目标信息的函数,通过XML组件进行实现。
3 Function GetURL(url)
4 Set Retrieval = CreateObject ( " Microsoft.XMLHTTP " )
5 With Retrieval
6 .Open " GET " , url, False
7 .Send
8 GetURL = bytes2bstr(.responsebody)
9 ' 对取得信息进行验证,如果信息长度小于100则说明截取失败
10 if len (.responsebody) < 100 then
11 response.write " 获取远程文件 <a href= " & url & " target=_blank> " & url & " </a> 失败。"
12 response. end
13 end if
14
15 End With
16 Set Retrieval = Nothing
17 End Function
18 ' 二进制转字符串,否则会出现乱码的!
19 function bytes2bstr(vin)
20 strreturn = ""
21 for i = 1 to lenb(vin)
22 thischarcode = ascb(midb(vin,i, 1 ))
23 if thischarcode < & h80 then
24 strreturn = strreturn & chr (thischarcode)
25 else
26 nextcharcode = ascb(midb(vin,i + 1 , 1 ))
27 strreturn = strreturn & chr ( clng (thischarcode) * & h100 + cint (nextcharcode))
28 i = i + 1
29 end if
30 next
31 bytes2bstr = strreturn
32 end function
33 ' 声明截取的格式,从Start开始截取,到Last为结束
34 Function GetKey(HTML,Start,Last)
35 filearray = split (HTML,Start)
36 filearray2 = split (filearray( 1 ),Last)
37 GetKey = filearray2( 0 )
38 End Function
39
40 Dim Softid,Url,Html,Title
41
42 ' 获取要取页面的ID
43
44 SoftId = Request( " Id " )
45
46 Url = " http://www3.skycn.com/soft/ " & SoftId & " .html "
47
48 Html = GetURL(Url)
49
50 ' 以截取天空软件的软件名为例子
51
52 Title = GetKey(Html, " <font color='#004FC6' size='3'> " , " </font></b></td></tr> " )
53
54 ' 打开数据库,准备入库
55
56 dim connstr,conn,rs,sql
57
58 connstr = " DBQ= " + server.mappath( " db1.mdb " ) + " ;DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
59
60 set conn = server. createobject ( " ADODB.CONNECTION " )
61
62 conn.open connstr
63
64 set rs = server. createobject ( " adodb.recordset " )
65
66 sql = " select [列名] from [表名] where [列名]=' " & Title & " '"
67
68 rs.open sql,conn, 3 , 3
69
70 if rs.eof and rs.bof then
71
72 rs( " 列名 " ) = Title
73
74 rs.update
75
76 set rs = nothing
77
78 end if
79
80 set rs = nothing
81
82 Response.Write " 采集完毕!"
83
84 % >
2 ' 声明取得目标信息的函数,通过XML组件进行实现。
3 Function GetURL(url)
4 Set Retrieval = CreateObject ( " Microsoft.XMLHTTP " )
5 With Retrieval
6 .Open " GET " , url, False
7 .Send
8 GetURL = bytes2bstr(.responsebody)
9 ' 对取得信息进行验证,如果信息长度小于100则说明截取失败
10 if len (.responsebody) < 100 then
11 response.write " 获取远程文件 <a href= " & url & " target=_blank> " & url & " </a> 失败。"
12 response. end
13 end if
14
15 End With
16 Set Retrieval = Nothing
17 End Function
18 ' 二进制转字符串,否则会出现乱码的!
19 function bytes2bstr(vin)
20 strreturn = ""
21 for i = 1 to lenb(vin)
22 thischarcode = ascb(midb(vin,i, 1 ))
23 if thischarcode < & h80 then
24 strreturn = strreturn & chr (thischarcode)
25 else
26 nextcharcode = ascb(midb(vin,i + 1 , 1 ))
27 strreturn = strreturn & chr ( clng (thischarcode) * & h100 + cint (nextcharcode))
28 i = i + 1
29 end if
30 next
31 bytes2bstr = strreturn
32 end function
33 ' 声明截取的格式,从Start开始截取,到Last为结束
34 Function GetKey(HTML,Start,Last)
35 filearray = split (HTML,Start)
36 filearray2 = split (filearray( 1 ),Last)
37 GetKey = filearray2( 0 )
38 End Function
39
40 Dim Softid,Url,Html,Title
41
42 ' 获取要取页面的ID
43
44 SoftId = Request( " Id " )
45
46 Url = " http://www3.skycn.com/soft/ " & SoftId & " .html "
47
48 Html = GetURL(Url)
49
50 ' 以截取天空软件的软件名为例子
51
52 Title = GetKey(Html, " <font color='#004FC6' size='3'> " , " </font></b></td></tr> " )
53
54 ' 打开数据库,准备入库
55
56 dim connstr,conn,rs,sql
57
58 connstr = " DBQ= " + server.mappath( " db1.mdb " ) + " ;DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
59
60 set conn = server. createobject ( " ADODB.CONNECTION " )
61
62 conn.open connstr
63
64 set rs = server. createobject ( " adodb.recordset " )
65
66 sql = " select [列名] from [表名] where [列名]=' " & Title & " '"
67
68 rs.open sql,conn, 3 , 3
69
70 if rs.eof and rs.bof then
71
72 rs( " 列名 " ) = Title
73
74 rs.update
75
76 set rs = nothing
77
78 end if
79
80 set rs = nothing
81
82 Response.Write " 采集完毕!"
83
84 % >