ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:19.09KB ,
资源ID:4965356      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4965356.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(谈XMLHTTP对象属性和方法VBA抓取网页数据.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

谈XMLHTTP对象属性和方法VBA抓取网页数据.docx

1、谈XMLHTTP对象属性和方法VBA抓取网页数据用VBA抓取网页数据有不少方法,其中一种便是引用XMLHTTP对象。在这里尝试为大家介绍一下这个对象的一些基本属性和方法还有一些应用示例。XMLHTTP对象参考IXMLHTTPRequest提供客户端同http服务器通讯的协议示例以下示例建立一个XMLHTTP对象,并向http服务器发出指定地址的请求,请求返回XML的源文件(XML document),如果服务器不能连通,则返回错误。Dim HttpReq As ObjectSet HttpReq = CreateObject(MSXML2.XMLHTTP.3.0)HttpReq.open GE

2、T, http:/ ajaxServer.aspx, FalseHttpReq.sendMsgBox HttpReq.responseText说明:第一,二行可以用以下语句代替,但前提是需要在对象里先引用Microsoft XML,v2.6-6.0(msxml2.dll, msxml3.dll, msxml4.dll, msxml5.dll, msxml6.dll)其中之一。Dim HttpReq As New MSXML2.XMLHTTP30备注客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft XM

3、L Document Object Model (DOM)处理回应。 该对完全象集成了Microsoft XML Core Services (MSXML),支持直接发送请求,并用MSXML DOM分析响应。由于集成了对Extensible Stylesheet Language (XSL)的支持,XMLHTT对象组件提供一个很简易的途径向HTTP服务器发送一个结构化查询,并支持用多种形式有效显示结果。通常的使用顺序是,先用open 方法,再用send方法发送请求,然后用setRequestHeader方法设置自定义头信息,最后查看四种以不同形式返回的响应结果。XMLHTTP对象支持Micro

4、soft Internet Explorer (IE) 5.0 及以上版本,只要你的网页浏览器指定一种语言进行浏览。更详细的信息请查看Explorer的帮助文件关于To specify another language for Web page content 的部份。版本MSXML 2.0及以上版本先决条件如果不用CreateObject方法创建对象,则需要先引用以下任意一个版本的文件: msxml3.dll, msxml2.lib (MSXML 3.0)msxml4.dll, msxml2.lib (MSXML 4.0)msxml5.dll, msxml2.lib (MSXML 5.0 f

5、or Microsoft Office Applications)msxml6.dll, msxml2.lib (MSXML 6.0)Header and IDL files: msxml2.h, msxml2.idlXMLHttp成员属性onreadystatechange*指定当readyState属性改变时的事件处理句柄。只写. 每个状态改变时都会触发这个事件处理器readyState 返回当前请求的状态,只读.responseBody 将回应信息正文以unsigned byte数组形式返回.只读responseStream以Ado Stream对象的形式返回响应信息。只读respons

6、eText将响应信息作为字符串返回.只读responseXML将响应信息格式化为Xml Document对象并返回,只读status返回当前请求的http状态码.只读statusText 返回当前请求的响应行状态,只读* 表示此属性是W3C文档对象模型的扩展.在VBA中不能直接调用方法abort取消当前请求getAllResponseHeaders获取响应的所有http头getResponseHeader从响应信息中获取指定的http头open创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)send发送请求到http服务器并接收回应setRequestHeade

7、r单独指定请求的某个http头readyState属性返回XMLHTTP请求的当前状态此属性只读,返回值为4字节的长整型(具体值请看备注)当XMLHttp对象把一个HTTP请求发送到服务器时将经历若干种状态:一直等待直到请求被处理;然后,它才接收一个响应。这样以来,脚本才正确响应各种状态-XMLHttpRequest对象拥有一个描述对象的当前状态的readyState属性。语法strValue = oXMLHttpRequest.readyState; 示例Dim XmlHttp As ObjectSet XmlHttp = CreateObject(Msxml2.XMLHTTP.3.0) X

8、mlHttp.Open GET, http:/localhost/test.xml, True XmlHttp.send If XmlHttp.readyState = 4 Then MsgBox Done End If备注此属性只读,状态用长度为4的整型表示(4-byte integer).定义如下:0未初始化状态。此时,已经创建一个XMLHttpRequest对象,但是还没有初始化(即还没调用open方法)。1初始化状态。此时,已经调用open方法,并且XMLHttpRequest对象已经准备好把一个请求发送到服务器,但还没调用send方法。2发送状态。此时,已经调用send方法,把一个请

9、求发送到服务器端,但是还没有收到一个响应,即是当前的状态及http头部信息未知。3正在接收状态。此时,已经接收到HTTP响应头部信息,但是消息体部分还没有完全接收结束,这时通过responseBody和responseText获取部分数据会出现错误。4数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据Note 从MSXML 3.0开始,如果在数据还没有加载完毕(例如,在加载状态或交互式状态)前就读取status 属性,则会返回一个错误信息:The data necessary to complete this operation is not y

10、et available.版本MSXML 2.0及以上版本responseBody属性以未解码的二进制数组形式返回HTTP服务器响应数据。语法strValue = oXMLHttpRequest.responseBody; 示例Dim xmlhttp As New Msxml2.XMLHTTP50xmlhttp.open GET, http:/localhost/test.xml, Falsexmlhttp.sendMsgBox UBound(xmlhttp.responseBody)备注返回值为Variant类型,只读。XMLHTTP的responseBody从服务器返回一个二进制数组,即一

11、个类型为VT_ARRAY | VT_UI1*的安全数组(SAFEARRAY)来表示返回数据的实体。他包含了从服务器返回的未经解码的二进制数据,因此,基于请求不同的服务器,最终 会显示不同的二进制编码数据(UTF-8, UCS-2, UCS-4, Shift_JIS等等)。*VT_UI1:无符号1字节整数(BYTE)数组当Variant的数据类型为VT_ARRAY | VT_UI1时,返回一个SAFEARRAY安全数组如果想返回解码后的数据实体则需要进行编码转换来解码,否则会发生乱码。如以下程序会发生中文乱码:Dim xmlhttp As New Msxml2.XMLHTTP50xmlhttp.

12、open GET, http:/localhost/test.xml, Falsexmlhttp.sendMsgBox xmlhttp.responseBody以下为编码转换函数:Function bytes2BSTR(arrBytes) 编码转换Dim strReturn As StringDim ThisCharCode As StringDim NextCharCode As StringDim i As LongstrReturn = arrBytes = CStr(arrBytes)For i = 1 To LenB(arrBytes)ThisCharCode = AscB(MidB

13、(arrBytes, i, 1)If ThisCharCode &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(arrBytes, i + 1, 1)strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)i = i + 1End IfNext ibytes2BSTR = strReturnEnd Function以下程序不会发生乱码了:Dim xmlhttp As New Msxml2.XM

14、LHTTP50xmlhttp.open GET, http:/localhost/test.xml, Falsexmlhttp.sendMsgBox bytes2BSTR(xmlhttp.responseBody)版本MSXML 2.0及以上版本responseStream属性以Ado Stream对象的形式返回响应信息语法strValue = oXMLHttpRequest.responseStream; 备注返回值为Variant类型,只读。XMLHTTP的responseStream从服务器返回一数据流入 stream(IStream)。该包含了从服务器返回的未经解码的二进制数据,因此,

15、基于请求不同的服务器,最终会显示不同的二进制编码数据(UTF- 8, UCS-2, UCS-4, Shift_JIS等等)。如果请求的网页的数据编码不是二进制,则会发生乱码。版本MSXML 2.0及以上版本responseText属性以字符串形式返回响应信息(即我们通常见到的网页源文件)语法strValue = oXMLHttpRequest.responseText; 示例Dim xmlhttp As New Msxml2.XMLHTTP30xmlhttp.open GET, http:/localhost/test.xml, Falsexmlhttp.sendMsgBox xmlhttp.

16、responseText备注返回值为String类型,此属性只读。XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据是匹配的Unicode BOM(byte-order mark)编码,XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。这个responseText属性包含客户端接收到的HTTP响应的文本内容。当readyState值为0、1或2时,res

17、ponseText包含一个空字符串。当readyState值为3(正在接收)时,响应中包含客户端还未完成的响应信息。当readyState为4(已加载)时,该responseText包含完整的响应信息。版本MSXML 2.0及以上版本responseXML属性以Xml Document对象形式返回将响应信息语法Set objDispatch = oXMLHttpRequest.responseXML示例Dim xmlhttp As New Msxml2.XMLHTTP30xmlhttp.open GET, http:/localhost/test.xml, Falsexmlhttp.sendM

18、sgBox xmlhttp.responseXML.xml备注此属性只读,将响应信息格式化为Xml Document对象并返回。如果响应数据不是有效的XML文档,此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。 此responseXML属性用于当接收到完整的HTTP响应时(readyState为4)描述XML响应;如果响应实体不是有效的xml格式,则返回错误。无论何时,只要readyState值不为4,那么该responseXML的值也会返回null。如果Content-Type头部并不包含以下这些媒体类型之一:Content-Type

19、头部指定MIME(媒体)类型为text/xml,application/xml或以+xml结尾,例如,application/rss+xml,那么responseXML的值为null。其实,这个responseXML属性值是一个文档接口类型的对象,用来描述被分析的文档。如果文档不能被分析(例如,如果文档不是良构的或不支持文档相应的字符编码),那么responseXML的值将为null。版本MSXML 2.0及以上版本status属性返回当前请求的http状态码,长整型,只读。语法lValue = oXMLHttpRequest.status; 示例Dim xmlServerHttp As Ne

20、w Msxml2.ServerXMLHTTP30xmlServerHttp.open GET, http:/localhost/books.xml, FalsexmlServerHttp.sendMsgBox xmlServerHttp.status返回值长整形标准http状态码,定义如下: 状态码 描述 100Continue101Switching protocols200OK201Created202Accepted203Non-Authoritative Information204No Content205Reset Content206Partial Content300Multi

21、ple Choices301Moved Permanently302Found303See Other304Not Modified305Use Proxy307Temporary Redirect400Bad Request401Unauthorized402Payment Required403Forbidden404Not Found405Method Not Allowed406Not Acceptable407Proxy Authentication Required408Request Timeout409Conflict410Gone411Length Required412Pr

22、econdition Failed413Request Entity Too Large414Request-URI Too Long415Unsupported Media Type416Requested Range Not Suitable417Expectation Failed500Internal Server Error501Not Implemented502Bad Gateway503Service Unavailable504Gateway Timeout505HTTP Version Not Supported备注以长整形数字来表示当前请求的http状态,此属性仅当数据发

23、送并接收完毕后才可获取。 而且,仅当readyState值为3(正在接收中)或4(已加载)时,这个status属性才可用。当readyState的值小于3时试图存取status的值将引发一个异常。版本MSXML 2.0及以上版本statusText属性返回当前请求的响应状态代码描述,字符串类型,只读。语法strValue = oXMLHttpRequest.statusText示例Dim xmlhttp As New Msxml2.XMLHTTP30xmlhttp.open GET, http:/localhost/books.xml, Falsexmlhttp.sendMsgBox xmlhttp. statusText备注以BSTR返回当前请求的响应状态代码描述,此属性仅当数据发送并接收完毕后才可获取,即仅当readyState值为3或4才可用。当readyState为其它值时试图存取statusText属性将引发一个异常。版本MSXML 2.0及以上版本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1