excel爬虫相关学习2:excel 和 vba 爬虫相关xmlhttp方法

目录

前言:vba 爬虫相关xmlhttp的方法

1 什么是xmlhttp

1.1 定义

1.2 特点

定义XMLHTTP对象:

XMLHTTP方法:

open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)

send(varBody)

setRequestHeader(bstrHeader, bstrValue)

abort

getAllResponseHeaders

getResponseHeader("header")

XMLHTTP属性:


前言:vba 爬虫相关xmlhttp的方法

  • 除了EXCEL里直接用 来自网站可以爬数据
  • VBA也可以写爬虫代码
  • 但是设计 xmlhttp 相关的内容

1 什么是xmlhttp

1.1 定义

  • 顾名思义,XMLHTTP是个传送XML格式数据的超文本传输协议。
  • XMLHTTP的数据传输过程更为灵活一些:
  • 下面是网上说灵活的地方(看起来一般,可能现在是标配了把)
  • 它上传的指令可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。还可以是URL的参数。
  • 它下达的结果可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。

1.2 特点

  • 也是跨语言的
  • 现在所知的,vb,js

1.3 创建和类型

客户端调用XMLHTTP的过程很简单,只有5个步骤: 
1、创建XMLHTTP对象 
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。 
客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。 
3、发送指令。 
4、等待并接收服务端返回的处理结果。 
5、释放XMLHTTP对象 

例子是下面代码,有点问题


Sub t1()
  strUrl = "http://www.86pm25.com/paiming.htm"
  getHtmlStr (strUrl)
End Sub



Public Function getHtmlStr(strUrl)
    Dim XmlHttp
    Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
    XmlHttp.Open "GET", strUrl, True
    XmlHttp.send
    
    Content = XmlHttp.responsetext
    ThisWorkbook.Sheets("sheet5").Cells(1, 1) = Content
'    getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
'    Set XmlHttp = Nothing
End Function

2 定义XMLHTTP对象:

(vbs)

Msxml2.XMLHTTP是高版本,受msxml3.dll+支持   
Microsoft.XMLHTTP是低本,一般是msxml2.6以下版本使用

  • dim objxml  as object
  • Set objXML = CreateObject("Msxml2.XMLHTTP") 
  • Set objXML = CreateObject("Microsoft.XMLHTTP")   

(javascript)

  • var xml = new ActiveXObject("Microsoft.XMLHTTP") 
  • Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP") 

3 XMLHTTP方法:

3.1 open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)

  • bstrMethod: 数据传送方式,即GET或POST。用"POST"方式发送数据,可以大到4MB,也可以换为"GET",只能256KB。
  • bstrUrl: 服务网页的URL。 
  • varAsync: 是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。 
  • bstrUser: 用户名,可省略。 
  • bstrPassword:用户口令,可省略。 

3.2 send(varBody)

  • varBody:指令集。
  • 可以是XML格式数据,
  • 也可以是字符串,流,或者一个无符号整数数组。
  • 也可以省略,让指令通过Open方法的URL参数代入。

  • 发送数据的方式分为同步和异步两种。
  • 在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;
  • 而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。

3.3 setRequestHeader(bstrHeader, bstrValue)

  • bstrHeader:HTTP 头(header) 
  • bstrValue:HTTP 头(header)的值
  • 如果Open方法定义为POST,可以定义表单方式上传: 
  • xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 

3.4 abort

  • 取消/停止 当前 HTTP 请求

3.5 getAllResponseHeaders

  • 从响应信息中检索所有的标头字段

3.6 getResponseHeader("header")

4 XMLHTTP属性:

4.1 xmlhttp的属性

  • onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。
  • responseBody:         结果返回为无符号整数数组。
  • responseStream:      结果返回为IStream流。
  • responseText :          结果返回为字符串。
  • responseXML:          结果返回为XML格式数据。
  • status:                       Long型 服务器返回的HTTP状态码
  • statusText :               String型 服务器HTTP响应行状态 

4.2  XmlHttp.responsetext 即是网页内容

 



Sub t1()
  strUrl = "http://www.86pm25.com/paiming.htm"
  getHtmlStr (strUrl)
End Sub



Public Function getHtmlStr(strUrl)
    Dim XmlHttp
    Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
    XmlHttp.Open "GET", strUrl, True
    XmlHttp.send
    
    r1 = XmlHttp.responsetext
'    r2 = XmlHttp.responsexml
'    r3 = XmlHttp.responsebody
'    r4 = XmlHttp.responsestream

    ThisWorkbook.Sheets("sheet5").Cells(1, 1) = r1
'    ThisWorkbook.Sheets("sheet5").Cells(1, 2) = r2
'    ThisWorkbook.Sheets("sheet5").Cells(1, 3) = r3
'    ThisWorkbook.Sheets("sheet5").Cells(1, 4) = r4
    
'    getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
'    Set XmlHttp = Nothing
End Function






'''Function getHtmlStr(strUrl)
'''    Dim XmlHttp
'''    Set XmlHttp = CreateObject("Microsoft.XMLHTTP")
'''    XmlHttp.Open "GET", strUrl, True
'''
''''    If XmlHttpRequest.status_code = 200 Then
'''
'''        XmlHttp.send
'''
'''    '    Content = XmlHttp.responsetext
'''    '    arr1 = Split(Content, "") 'You cannot dim arr1() at the beginning
'''    '    arr2 = Split(arr1(1), "")
'''    '    Sheet3.Cells(i, 5) = arr2(0)
'''
'''
'''
'''        ThisWorkbook.Sheets("sheet5").Cells(1, 1) = Content
'''        getHtmlStr = StrConv(XmlHttp.ResponseBody, vbUnicode)
'''        Set XmlHttp = Nothing
'''
''''    End If
'''End Function

excel爬虫相关学习2:excel 和 vba 爬虫相关xmlhttp方法_第1张图片

 

必须绕一手?

这几种不能打印出来?

  • responseBody:       结果返回为无符号整数数组。
  • responseStream:      结果返回为IStream流。
  • responseText :       结果返回为字符串。

三、XMLHTTP属性:

onreadystatechange
在同步执行方式下获得返回结果的事件句柄。只能在DOM中调用。

readyState
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 
值 说明
0 Response对象已经创建,但XML文档上载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息


 

你可能感兴趣的:(excel,爬虫,学习)