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

news2024/10/5 21:25:08

目录

前言: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)


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 被挤出前三。。

TIOBE 2023 年 06 月份的编程语言排行榜已经公布&#xff0c;官方的标题是&#xff1a;Python 还会保持第一吗&#xff1f;&#xff08;Will Python remain number 1?&#xff09; 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于…

简述Spring中IOC核心流程

基础概念 IOC 和 DI IOC&#xff0c;即控制反转。是Spring的一种设计思想。传统程序设计中&#xff0c;我们创建一个对象是通过 new 关键字&#xff0c;是程序主动去创建依赖对象&#xff0c;而在spring中专门有一个容器来创建和管理这些对象&#xff0c;并将对象依赖的其他对…

rpm详解——原理,命令详细讲解

目录 三个问题 什么是RPM SRPM (Source RPM) RPM软件包 RPM 查询命令 查询已安装的RPM软件信息 查询文件/目录属于哪个RPM软件 查询未安装的RPM包文件 RPM 软件包的安装、卸载 安装 卸载 RPM 升级与更新 三个问题 先抛出三个问题&#xff0c;最后简单解释一下。 …

HiveSQL 电商场景TopK统计

数据准备 CREATE TABLE test.test2 ( user_id string, shop string ) ROW format delimited FIELDS TERMINATED BY \t; INSERT INTO TABLE test.test2 VALUES ( u1, a ), ( u2, b ), ( u1, b ), ( u1, a ), ( u3, c ), ( u4, b ), ( u1, a ), ( u2, c ), ( u5, b ), ( u4, b )…

基于人工智能的AI理发师能帮托尼老师做什么?

BarberGPT是一个人工智能理发师&#xff0c;它可以让您在照片上尝试不同的发型。您只需要上传您的照片&#xff0c;标记您的头发&#xff0c;然后就可以看到惊人的变化。BarberGPT使用了先进的深度学习技术&#xff0c;可以根据您的脸型、肤色和发质生成适合您的发型。BarberGP…

国产监控数据库产品lepus最新版学习和部署(V5.1)

目录 lepus是什么&#xff1f; 二进制安装&#xff08;最新v5.1&#xff09; 1.基础环境 2.安装NSQ 3.NSQ消息测试 4.安装lepus 5.初始化数据库 6.修改配置文件 7.启动服务组件 8.安装lepus-console 9.运行和访问控制台 lepus是什么&#xff1f; Lepus数据库监控系统…

Docker容器应用为工业连接提供了新选择

一 智能数据管理 Docker容器应用可灵活部署在异构计算平台上&#xff0c;且仅需占用少量的资源&#xff0c;这可为工业4.0提供一种新的数据集成方案。Docker容器应用程序是提供特定功能的小型软件模块&#xff0c;可在自动化领域中用于智能数据管理。而Softing推出的一个新产品…

简要介绍 | CUDA底层原理:加速高性能计算的关键技术

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对CUDA的底层原理进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 CUDA底层原理&#xff1a;加速高性能计算的关键技术 CUDA Refresher: The GPU Computing Ecosystem | NVIDIA Technical Blog 1…

通过SECS/GEM平台实现半导体设备与EAP系统互联

在半导体电子和光伏行业大量的设备需要通过SECS/GEM协议与EAP系统进行互联。 常见的设备互联需求主要分为以下几类&#xff1a; 1.生产过程自动化&#xff1a;设备通过EAP下发指令进行切换程序、条码或RFID标签采集、Foup自动加载与卸载、晶圆生产加工自动化&#xff0c;减少…

6 种方式读取 Springboot 的配置,老司机都这么玩(原理+实战)

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一&#xff0c;但就是这么常用的功能&#xff0c;仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式&#xff0c;目的不仅是要让大家学会如何使用&#xff0c;更重要的是弄清配置加载、读取的底层…

Windows WSL子系统Ubuntu22.04安装Nvidia显卡驱动

最近在研究AI&#xff0c;如果在Linux系统中部署的话需要重装系统&#xff0c;有些麻烦&#xff0c;又不想折腾。所以闲置很久没研究的WSL又拿起来研究了&#xff0c;当然部署ai还需要显卡驱动的支持&#xff0c;就必须先安装显卡驱动。 还没有安装过WSL的童鞋可以看我之前发布…

在 javascript 中清除 canvas 画布

文章目录 在 JavaScript 中清除画布在 HTML 中使用 JavaScript 创建画布 我们使用 canvas 来绘制图形。 它提供了多种绘制的方法&#xff0c;如圆形、方框、文字、添加图片等&#xff0c;我们在使用canvas时需要清除它并在上面绘制。 本文介绍如何在 JavaScript 中清除画布。 …

LogicFlow:自定义 bpmn 用户节点(1)

切入正题之前&#xff0c;首先我们先了解下面板上面节点的几个重要属性&#xff0c;如下图&#xff1a; 虽然 logicflow 内置插件里面有用户节点&#xff08;bpmn:userTask&#xff09;&#xff0c;但是你若是想实现下面这种形式&#xff0c;就需要自己重新写个节点了。 上面…

MongoDB_5.0.18下载及安装(CentOS7)

文章目录 MongoDB安装&#xff08;Centos7&#xff09;1、下载地址2、安装流程2.1 下载server包2.2 安装server包2.3 修改默认mongod.conf配置文件2.4 启动服务2.5 这样就可以通过远程工具进行链接使用&#xff0c;创建mongodb用户&#xff0c;详细请查看其他文档 3、分享远程工…

球王梅西的力量

这次阿根廷来中国参加友谊赛&#xff0c;场内场外都有很多值得大众思考的&#xff0c;无论是对主办方的各种吐槽&#xff0c;还是对球迷近乎疯狂的追星行为&#xff0c;又或者是疫情放开后&#xff0c;大众积压已久的情绪&#xff0c;好象以往国外球队来&#xff0c;无论是顶级…

Axure教程——滑动拼图解锁

本文将教大家如何用AXURE中的动态面板制作拼图解锁 一、效果 预览地址&#xff1a;https://74wxu6.axshare.com 二、功能 拖动图片到指定位置提示“验证成功”&#xff0c;如果没到指定位置则提示“验证没成功&#xff0c;请重新验证” 三、制作 1、制作拼图 加入底部验证图…

【Python 随练】乒乓球比赛名单

题目&#xff1a; 两个乒乓球队进行比赛&#xff0c;各出三人。甲队为 a,b,c 三人&#xff0c;乙队为 x,y,z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a 说他不和 x 比&#xff0c;c 说他不和 x,z 比&#xff0c;请编程序找出三队赛手的名单。 简介&#xff1a;…

【软考-中级】系统集成项目管理工程师【总】

持续更新中。。。。。。。。。。。。。。。 学习目标&#xff1a;完成2023上半年 软件中考任务 目标23年5月 考试前 完成 相关知识点学习 和练习 核心 十五至尊图&#xff1a; 上面图是考试的核心&#xff0c;需要背下来 一、信息化知识&#xff08;重点&#xff09;一般…

Selenium Web自动化测试框架实践

目录 前言&#xff1a; 项目背景 功能实现 项目架构 浏览器driver定义 用例运行前后的环境准备工作 工具方法模块 Pageobject页面对象封装 执行测试用例   前言&#xff1a; Selenium是一个基于Web的自动化测试框架&#xff0c;可以通过模拟用户在浏览器上的操作&#xff0c;…

直接选择排序及其稳定性分析

直接选择排序 直接选择排序是一种很直观的排序方法。其操作是这样&#xff1a;先在未排序的序列中选择最小的元素&#xff08;或最大的元素&#xff09;&#xff0c;把它与第一个元素交换&#xff0c;放在第一个位置&#xff0c;再在剩余未排序序列中选择第二小的&#xff0c;…