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方法:

Microsoft.XMLHTTP_百度百科含义Microsoft.XMLHttp组件的属性方法https://baike.baidu.com/item/Microsoft.XMLHTTP/5265442?fr=aladdin

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

    open  创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码) 
        XMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword); 
        参数 
            bstrMethod http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。 
            bstrUrl 请求的URL地址,可以为绝对地址也可以为相对地址。 
            varAsync[可选] 布尔型,指定此请求是否为异步方式,默认为true。 
            bstrUser[可选] 如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。 
            bstrPassword[可选] 验证信息中的密码部分,如果用户名为空,则此值将被忽略。 
        调用open方法后,会将readyState修改为1。 

3.1.1 open(get,)

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

3.1.2 open(post ,)

Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)打开指定网址

bstrMethod:  数据传送方式,即GET或POST。 

bstrUrl:    服务网页的URL。 

varAsync:   是否同步执行。缺省为True,即同步执行,但只能在DOM中实施同步执行。用中一般将其置为False,即异步执行。 

bstrUser:    用户名,可省略。 

bstrPassword:用户口令,可省略。 

setRequestHeader(bstrHeader, bstrvalue)

bstrHeader:HTTP 头(header) 

bstrvalue: HTTP 头(header)的值 

如果Open方法定义为POST,可以定义表单方式上传: 

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 

3.2 send(varBody)

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

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

send  发送请求到http服务器并接收回应 
        XMLHttpRequest.send(varBody); 
        参数 
            varBody 欲通过此请求发送的数据。 
        调用send方法后,会先调用onreadystatechange方法,此时readyState状态为1,然后会已经进程将readyState修改为2、3、4 
        一般情况下,使用Ajax提交或者获取参数可以采用GET、POST方式,使用GET方法将要提交的参数写到open方法的url参数中,此时send方法的参数为null。 
        例如 : 
            var url = "login.jsp?user=XXX&pwd=XXX"; 
            xmlHttpRequest.open("GET",url,true); 
            xmlHttpRequset.send(); 
      此外,也可以使用send方法传递参数。使用send方法传递参数使用的是POST方法,需要设定Content-Type头信息,模拟HTTP POST方法发送一个表单,这样服务器才会知道如何处理上传的内容。参数的提交格式和GET方法中url的写法一样。设置头信息前必须先调用open方法。 
      例如: 
            xmlHttpRequest.open("POST","login.jsp",true); 
            xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8"); 
            xmlHttpRequest.send("user="+username+"&pwd="+password); 
      需要注意的是根据提交方式的不同,两种提交方式分别调用后台的doGet方法和doPost方法。 

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属性:

Microsoft.XMLHTTP_百度百科含义Microsoft.XMLHttp组件的属性方法https://baike.baidu.com/item/Microsoft.XMLHTTP/5265442?fr=aladdin

4.1 xmlhttp的属性罗列

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

4.2 responseBody:

1、ResponseBody是二进制的数据,是服务器传来的没有经过任何加工的数据。

4.2  XmlHttp.responsetext 即是网页内容

2 ResponseText是按照utf-8编码把ResponseBody转换而成,也就是:ResponseText=ByteToStr(ResponseBody,"UTF-8")



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, "<Holding>") 'You cannot dim arr1() at the beginning
'''    '    arr2 = Split(arr1(1), "</Holding>")
'''    '    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

必须绕一手?

    r1 = XmlHttp.responsetext

    ThisWorkbook.Sheets("sheet5").Cells(1, 1) = r1

这样就不行?

    ThisWorkbook.Sheets("sheet5").Cells(1, 1) =XmlHttp.responsetext

这几种不能打印出来?

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

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

readyState用来记录当前请求的状态,只读。 
        0(未初始化)   对象已创建,但是尚未初始化(尚未调用open方法) 
        1(初始化)     对象已初始化(调用了open方法),尚未调用send方法 
        2(发送数据)   send方法已调用,但是当前的状态及http头未知 
        3(数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误 
        4(完成)       数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 
        当readyState发生改变时,调用onreadystatechange方法,onreadystatechange需要自己定义。 
    status长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。 
    responseText 将响应信息作为字符串返回.只读 
    responseXML  将响应信息格式化为Xml Document对象并返回,只读 

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


 

其他

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

response.write(objXML.responseText)


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/30295.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot全局异常页面处理学习

首先我们先在控制器中写一个异常&#xff0c;默认情况下我们的SpringBoot异常页面是这个样子的。 示例代码如下: import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;/*** author qinxun* date 202…

拉新、转化、留存,一个做不好,就可能会噶?

用户周期 对于我们各个平台来说&#xff08;CSDN也是&#xff09;&#xff0c;我们用户都会有一个生命周期&#xff1a;引入期–成长期–成熟期–休眠期–流失期。 而一般获客就在引入期&#xff0c;在这个时候我们会通过推广的手段进行拉新&#xff1b;升值期则发生在成长期…

AotucCrawler 快速爬取图片

AotucCrawler 快速爬取图片 今天介绍一款自动化爬取图片项目。 GitHub: GitHub - YoongiKim/AutoCrawler: Google, Naver multiprocess image web crawler (Selenium) Google, Naver multiprocess image web crawler (Selenium) 关键字 爬虫网站&#xff1a;Google、Naver &…

最新大学计算机专业实习心得报告

最新大学计算机专业实习心得报告&#xff08;篇1&#xff09; 一、实习目的 通过理论联系实际&#xff0c;巩固所学的知识&#xff0c;提高处理实际问题的能力&#xff0c;为顺利毕业进行做好充分的准备&#xff0c;并为自己能顺利与社会环境接轨做准备。通过这次实习&#xff…

管理类联考——英语二——技巧篇——阅读理解——taiqi

第一章 翻译技巧概述 一、词汇方面 (一&#xff09;词义选择 大多数英语词汇是多义的&#xff0c;翻译时必须选择正确的词义。词义选择的方法有三&#xff1a;根据上下文和词的搭配选择根据词类选择、根据专业选择。 (二&#xff09;词义转换 在理解英文词汇的原始意义基础…

vue安裝及配置 nodejs安装配置

vue安装及配置 vue安装步骤 nodejs安装 安装nodejs环境&#xff1a;https://nodejs.org/en/ 查看node版本&#xff1a;node-v vue3.0需要使用node 8版本以上 npm镜像配置 npm是nodejs内置的资源管理器 npm两个镜像&#xff1a; 淘宝镜像&#xff1a;https://registry.npm.…

Parallel Desktop下的Centos 9 ping通网络,配置静态ip的全过程

目录 一、发现问题1. 找不到网卡配置文件2. 网络重启的命令一直无法执行成功 二、分析问题三、解决问题系统环境1. 打开网卡配置文件2. 修改ipv4配置3. 重载网卡配置文件4. ping通&#xff0c;可以正常上网了 四、疑问1. 如何确定自己是不是设置了静态ip2. DHCP是固定静态ip 的…

使用PyMC进行时间序列分层建模

在统计建模领域&#xff0c;理解总体趋势的同时解释群体差异的一个强大方法是分层(或多层)建模。这种方法允许参数随组而变化&#xff0c;并捕获组内和组间的变化。在时间序列数据中&#xff0c;这些特定于组的参数可以表示不同组随时间的不同模式。 今天&#xff0c;我们将深…

shell内置命令

目录 内置命令介绍内置命令列表alisa内置命令alias别名定义语法unalias 别名删除语法alias演示 echo内置命令echo命令介绍echo输出语法echo输出转义字符 read内置命令介绍语法options支持的参数示例1&#xff1a;多个变量赋值 exit内置命令介绍语法示例&#xff1a;Shell脚本文…

Day01 项目简介分布式基础概念

最近在改进公司开发的商城项目&#xff0c;看到了尚硅谷的谷粒商城&#xff0c;就快速学习了下&#xff0c;因为之前的Kafka,Redis都是在这学习的&#xff0c;还有大数据的Flink。所以感觉一定不错&#xff0c;就开始了。 这里做一下学习笔记 一、项目简介 1 、项目背景 1 &…

AutoSAR系列讲解 - AutoSAR标准文档概览

目录 一、文档下载 二、文档结构 三、文档内容 四、各部分介绍 1、Introduction and functional o 目录 一、文档下载 二、文档结构 三、文档内容 四、各部分介绍 1、Introduction and functional overview 2、Acronyms and abbreviations 3、Related documentati…

基于Java+SpringBoot+vue的口腔管家平台设计与实现

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

向日葵× 实在RPA擦出AI的火花,贝锐与实在智能官宣战略合作

6月19日&#xff0c;实在智能&#xff08;Intelligence Indeed&#xff09;与贝锐&#xff08;Oray&#xff09;正式宣布达成战略合作。实在智能作为国内AI准独角兽企业和超级自动化平台提供商&#xff0c;与国内领先的SaaS远程连接解决方案提供商贝锐的实力“牵手”&#xff0…

Yolov5(tag v7.0)网络结构解读,以yolov5s为例

最近yolov5用的多&#xff0c;发现确实好用&#xff0c;于是较深入学了一下。下面按照训练的流程梳理一下网络的结构&#xff0c;同时也是自己记一下便于后面查阅。 同时&#xff0c;我也查了一些关于yolov5网络结构介绍的资料&#xff0c;发现大多是v5.0&#xff0c;少数v6.0的…

游泳戴的耳机推荐,列举感受水下快乐的游泳耳机

​游泳是个真心好玩的活动&#xff0c;对一般人来说简直是大杀器&#xff01;它不仅对身体没有太大伤害&#xff0c;还能锻炼到身体的大部分肌肉&#xff0c;对心肺也超级有帮助。不过&#xff0c;问题来了&#xff1a; 之前很少见到有人戴耳机游泳&#xff0c;主要是担心进水…

mpi实现矩阵乘法,卷积,池化(gemm,covn,pooling)

矩阵乘法&#xff1a; 卷积&#xff1a; 池化&#xff1a; Mpi基本原理&#xff1a; 1.什么是MPI Massage Passing Interface:是消息传递函数库的标准规范&#xff0c;由MPI论坛开发。 一种新的库描述&#xff0c;不是一种语言。共有上百个函数调用接口&#xff0c;提供与C和F…

phpstorm+xdebug/php项目调试

前提&#xff1a;项目使用xampp集成 一、下载xdebug&#xff0c;当到xampp/php/exp目录下 二、配置php.ini [Xdebug] zend_extension"D:/xampp/php/ext/php_xdebug.dll" xdebug.collect_paramsOn xdebug.collect_returnOn xdebug.auto_traceOn xdebug.trace_output_…

android adb 获取电池信息以及设置

本文主要包含 1、设置adb 无线调试桥连接步骤 2、打印设备电池状态(当前电量、充电状态、充放电电流大小、电池种类等&#xff09; 3、更改电池充电状态、电量百分比、电池还原命令 4、断开adb 远程调试桥 -----------------------------------------------------------------…

【数据结构与算法分析】树上漫步之探究前序、中序、后序、广度优先遍历算法的实现与优化

文章目录 前言二叉树的遍历方式构建二叉树递归遍历二叉树非递归遍历二叉树层次遍历 示例二叉树结果总结 前言 二叉树是数据结构中最基本的数据结构之一&#xff0c;它在计算机科学中有着非常重要的应用。二叉树的遍历是指按照一定的顺序遍历二叉树中的所有节点&#xff0c;是二…

【STM32训练—WiFi模块】第二篇、STM32驱动ESP8266WiFi模块获取天气

目录 第一部分、前言 1、获取心知天气API接口 2、硬件准备 第二部分、电脑串口助手调试WIFI模块获取天气 1、ESP8266获取天气的流程 2、具体步骤 第三部分、STM32驱动ESP8266模块获取天气数据 1、天气数据的解析 1.1、什么函数来解析天气数据&#xff1f; 2.1、解析后…