• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP > 用xmlhttp编写web采集程序

用xmlhttp编写web采集程序

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了xmlhttprequest,xmlhttp,xmlhttprequest对象,xmlhttp.open,xmlhttp.responsetext等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
晰带语法着色的版本:http://gwx.showus.net/blog/article.asp?id=229

原创很辛苦,转载请注明原文链接:http://gwx.showus.net/blog/article.asp?id=229

web采集程序?网页抓取程序?小倫程序?不管怎么叫,这种程序应用倒是蛮广的。本文不讨论这种使用这种程序引起的版权或道德问题,只谈这种程序在ASP+VBScript环境下的实现 :-)

预备知识:除了一般的ASP+VBScript的知识外,你还需要了解xmlhttp对象和正则表达式对象。xmlhttp对象是时下风头正劲的Ajax的主角;而学好了正则表达式,你再也不用为处理复杂的字符串犯愁。

在编写和调试正则表达式时,RegEx 这个小工具非常有用。

目录
抓取一个远程网页并保存到本地 
改进:处理乱码 
同时下载远程网页的图片(和其它文件) 
改进:探测真实URL 
改进:避免重复下载 
实战举例(以****为例) 
分析列表页 
内容页的技巧 
分析内容页中的上一页,下一页 
高级主题:UTF-8和GB2312的转换 
更多高级主题:登陆后抓取,客户端伪造 
己有的采集程序 
原文链接:http://gwx.showus.net/blog/article.asp?id=229

1.抓取一个远程网页并保存到本地
'用于调试的过程,后面会多次调用检查中间结果
Dim inDebug:inDebug=True 
Sub D(Str)
    If inDebug = False Then Exit Sub
    Response.Write("<div style='color:#003399; border: solid 1px #003399; background: #EEF7FF; margin: 1px; font-size: 12px; padding: 4px;'>")
    Response.Write(Str &"</div>")
    Response.Flush()
End Sub

'过程: Save2File
'功能: 把文本或字节流保存为文件
'参数: sContent    要保存的内容
'       sFile       保存到文件,形如"files/abc.htm"
'       bText       是否是文本
'       bOverWrite  是否覆盖己存在文件
Sub Save2File(sContent,sFile,bText,bOverWrite)
    Call D("Save2File:"+sFile+" *是否文本:"&bText)
    Dim SaveOption,TypeOption
    If (bOverWrite = True) Then SaveOption=2 Else SaveOption=1
    If (bText = True) Then TypeOption=2 Else TypeOption=1
    Set Ads = Server.CreateObject("Adodb.Stream")
    With Ads
        .Type = TypeOption 
        .Open
        If (bText = True) Then .WriteText sContent Else .Write sContent
        .SaveToFile Server.MapPath(sFile),SaveOption
        .Cancel()
        .Close()
    End With
    Set Ads=nothing
End Sub

关键的函数
'函数: myHttpGet
'功能: 抓取一个远程文件(网页或图片等)并保存到本地
'参数: sUrl    远程文件的URL
'       bText   是否是文本(网页),下载远程图片是bText=False
'返回: 抓取的内容
Function myHttpGet(sUrl,bText)
    Call D("<font color=red>myHttpGet:</font>"+sUrl+" *是否文本:"&bText)
    'Set oXml = Server.CreateObject("Microsoft.XMLHTTP")
    Set oXml = Server.CreateObject("MSXML2.ServerXMLHTTP")  '服务器版本的XMLHTTP组件
    '理解下面的内容,你可以参考一下MSDN中的MSXML2.ServerXMLHTTP
    With oXml
        .Open "GET",sUrl,False
        .Send
        While .readyState <> 4  '等待下载完毕
            .waitForResponse 1000 
        Wend 
        If bText = True Then
            myHttpGet = bytes2BSTR(.responseBody)
        Else
            myHttpGet = .responseBody
        End If
    End With
    Set oXml = Nothing
End Function

改进:处理乱码
直接读取服务器返回的中文内容会出现乱码,myHttpGet函数中引用的bytes2BSTR的作用是正确读取服务器返回的文件中的双字节文本(比如说中文)
'myHttpGet helper 处理双字节文本
Function bytes2BSTR(vIn)
    strReturn = ""
    For i = 1 To LenB(vIn)
        ThisCharCode = AscB(MidB(vIn,i,1))
        If ThisCharCode < &H80 Then
            strReturn = strReturn & Chr(ThisCharCode)
        Else
            NextCharCode = AscB(MidB(vIn,i+1,1))
            strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
            i = i + 1
        End If
    Next
    bytes2BSTR = strReturn
End Function

bytes2BSTR函数的功能也可以利用Adodb.Stream组件通过下面的函数实现,虽然下面的函数可以指定字符集Charset,但它并不能转换编码,即传递"UTF-8"给参数sCset,来读取一张GB2312编码的网页将显示为乱码。
'CharsetHelper可以正确的读取以sCset(如"GB2312","UTF-8"等)编码的文件
Function CharsetHelper(arrBytes,sCset)
    Call D("CharsetHelper: "+sCset)
    Dim oAdos
    Set oAdos = CreateObject("Adodb.Stream")
    With oAdos
        .Type = 1
        .Mode =3    'adModeReadWrite
        .Open
        .Write arrBytes
        .Position = 0
        .Type = 2
        .Charset = sCset
        CharsetHelper = .ReadText 
        .Close
    End With
    Set oAdos = Nothing<
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp 使用 Microsoft.XMLHTTP 抓取网页内容并过滤需要的
  • asp中利用xmlhttp抓取网页内容的代码
  • asp xmlhttp下载一句话
  • 服务器XMLHTTP(Server XMLHTTP in ASP)基础知识
  • XMLHttp ASP远程获取网页内容代码
  • ASP利用XMLHTTP实现表单提交以及cookies的发送的代码
  • ajax XMLHTTP Post Form时的表单乱码综合解决
  • asp下利用XMLHTTP 从其他页面获取数据的代码
  • asp中xmlhttp组件发包
  • 用asp+xmlhttp编写web采集程序

相关文章

  • 2017-05-11ASP实现URL编码
  • 2017-05-11ASP下实现自动采集程序及入库的代码
  • 2017-05-11做了CDN加速的ASP网站获取用户真实IP程序
  • 2017-05-11asp中使用mysql数据库的注意实现
  • 2017-05-11跨越fso、wsh、 application写文件
  • 2017-05-11asp select下拉菜单选择图标并实时显示
  • 2017-05-11ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER方法探讨
  • 2017-05-11动网论坛的asp 数据库连接代码
  • 2017-05-116行代码实现无组件上传(author:stimson)
  • 2017-05-11ASP+JS三级联动下拉菜单[调用数据库数据]

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • AJAX简单应用实例-弹出层
    • asp检测是否为中文字符函数
    • asp 动态数组 提供Add、Insert、Remove、RemoveAt、Search等方法。
    • 比较详细的ASP rs.open语句详细说明
    • [转]ASP常用函数:TimeZone
    • asp自带的内存缓存 application
    • asp中文件与文件夹常用处理函数(文件后缀、创建文件等)
    • asp 判断是否为搜索引擎蜘蛛的代码
    • 天枫常用的ASP函数封装如下
    • Asp事务处理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有