• [轉]ASP采集ASP采集程序原理


    轉自:http://www.ppcn.net/n5049c52.aspx

    采集程序的主要步骤如下:

    一、获取被采集的页面的内容

    二、从获取代码中提取所有用的数据

    一、获取被采集的页面的内容

    我目前所掌握的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("","")

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Largest Rectangle in Histogram, 求矩形图中最大的长方形面积
    MergeSortedArray,合并两个有序的数组
    Remove Duplicates from Sorted List ,除去链表中相邻的重复元素
    Word Search, 在矩阵中寻找字符串,回溯算法
    SubSets,SubSets2, 求数组所有子集
    Longest Substring Without Repeating Characters,求没有重复字符的最长字串
    Minimum Window Substring, 包含子串的最小窗口,双指针
    Sort Colors,颜色排序
    Search a 2D Matrix,在有序矩阵查找,二分查找的变形; 行有序,列有序查找。
    EditDistance,求两个字符串最小编辑距离,动态规划
  • 原文地址:https://www.cnblogs.com/Athrun/p/1525536.html
Copyright © 2020-2023  润新知