vba抓取网页数据(《VBA信息获取与处理》教程共两册,八十四大智慧)

优采云 发布时间: 2022-01-07 03:13

  vba抓取网页数据(《VBA信息获取与处理》教程共两册,八十四大智慧)

  【分享成果,正能量庆幸】人的一生,肯定会遇到各种各样的挫折和挑战,巨大的压力会让你喘不过气来。然而,只有真正懂得适时弯腰的人,才能战胜危机,赢得胜利。这不是懦弱,也不是没有骨气,而是一种大智慧。武力和野蛮只会带来不必要的损失。《VBA信息获取与处理》教程是我的第六套教程,现在是第一次修订。本套教程定位于最高级,是初级和中级完成后的教程。本教程内容为:跨应用信息获取、随机信息利用、邮件发送、VBA上网数据抓取、VBA延时操作、剪贴板应用、Split函数扩展、工作表信息等应用交互、FSO对象的使用、工作表和文件夹信息的获取、图形信息的获取、工作表信息功能的定制等。文件由 32 位和 64 位 Office 系统测试。它非常抽象,更有研究价值。本教程共两卷,八十四讲。今天的内容是话题6“Using XMLHTTP in VBA to complete web data capture”的第三讲:VBA web数据捕捉结果链接 图形信息的获取,工作表信息功能的定制等。程序文件通过32位和64位Office系统测试。它非常抽象,更有研究价值。本教程共两卷,八十四讲。今天的内容是话题6“Using XMLHTTP in VBA to complete web data capture”的第三讲:VBA web数据捕捉结果链接 图形信息的获取,工作表信息功能的定制等。程序文件通过32位和64位Office系统测试。它非常抽象,更有研究价值。本教程共两卷,八十四讲。今天的内容是话题6“Using XMLHTTP in VBA to complete web data capture”的第三讲:VBA web数据捕捉结果链接

  

  第三部分使用XMLHTTP抓取百度搜索数据的结果,并给出开放链接。在上一讲中,我们实现了使用XMLHTTP来捕获搜索关键词的数据,但是我们在网上搜索的时候,往往不仅需要一般的数据支持,还需要一些具体的数据,比如: 找到了哪些网址,标题是什么?如果我需要进一步检查,我经常需要打开链接。如何捕获这些数据?所以让我意识到这个问题。实现场景: 如下图,当我们点击右侧按钮“使用VBA提取数据进行搜索关键词,并给出下载链接”时,可以给出查询的结果在下面的数据区。

  

  其实这种处理在工作中是经常遇到的,我们浏览的网页可以适当的保存一下,需要的时候再详细查询。特别是将这些数据以EXCEL形式存储,管理更加清晰。那么如何实现这个场景呢?我们仍然使用 XMLHTTP 来完成我们的工作。1 使用XMLHTTP实现数据查询和网页链接提取。我们先模拟直接在网页上查询数据。当我们输入数据并点击回车时,服务器会在我们的浏览器上反馈数据。我们需要检查网页的源代码进行分析,

  

  上面的截图是我输入“VBA Language Expert”点击回车后在后台看到的源代码。你会发现我们要写入EXCEL表格的所有信息都出现在这里了。其中“title”可以通过innerText属性获取,链接可以通过href属性获取。这真的很容易。接下来我们将多页查询的结果填入excel表格中。这时候,我们在向服务器发送时使用下面的代码可以通过询问header检查查询时间得到: .setRequestHeader "If-Modified-Since", "0" 这样就可以达到我们的要求了。2 使用XMLHTTP实现数据查询,提取网页链接的代码实现过程。下面我们将上面的思路转换成代码,如下图:

  

  

<p>代码说明: 1) Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP") Set objDOM = CreateObject("htmlfile") 上面的代码创建了两个引用,一个是XMLHTTP,一个是htmlfile,然后使用这两个参考来完成我们的工作。2)UU = Range("B1").Value 这是我们要查询的关键数据3)For i = 0 To 50 Step 10'五页这是使用i作为查询5次查询页码 4) strURL = "" strURL= strURL &amp; "wd=" &amp; UU strURL= strURL &amp; "&amp;pn=" &amp; i 以上代码完成了我们要查询的请求URL。5) .Open "GET", strURL, False 使用 OPEN 方法。6) .setRequestHeader "If-Modified-Since", "0" 请求头将浏览器端缓存页面的最后修改时间一起发送到服务器,服务器会将此时间与服务器上实际文件的最后修改时间进行比较,以确保我们每次请求的数据不是重复。7) .send 注意在这个命令之前应该完成请求头的提交8)objDOM.body.innerHTML = .responseText'将.responseText的内容写入新的objDOM对象的body中&lt; @9) 对于 objDOM 中的每个 objTitle。getElementsByTagName("h3") 遍历每个 H3 标签或标题。请注意,它是标签标题。定义最大的标题。定义最小的标题。服务器会将此时间与服务器上实际文件的最后修改时间进行比较,以确保我们每次请求的数据不会重复。7) .send 注意在这个命令之前应该完成请求头的提交8)objDOM.body.innerHTML = .responseText'将.responseText的内容写入新的objDOM对象的body中&lt; @9) 对于 objDOM 中的每个 objTitle。getElementsByTagName("h3") 遍历每个 H3 标签或标题。请注意,它是标签标题。定义最大的标题。定义最小的标题。服务器会将此时间与服务器上实际文件的最后修改时间进行比较,以确保我们每次请求的数据不会重复。7) .send 注意在这个命令之前应该完成请求头的提交8)objDOM.body.innerHTML = .responseText'将.responseText的内容写入新的objDOM对象的body中&lt; @9) 对于 objDOM 中的每个 objTitle。getElementsByTagName("h3") 遍历每个 H3 标签或标题。请注意,它是标签标题。定义最大的标题。定义最小的标题。将 .responseText 的内容写入新的 objDOM 对象

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线