找回密码
 立即注册

快捷登录

搜索
热搜: 活动 交友
查看: 34285|回复: 2

[今日开鲁] VBA网抓数据结果的链接

[复制链接]
发表于 2022-9-29 05:07:33 | 显示全部楼层 |阅读模式 来自: 北京
【分享成果,随喜正能量】人的一生,肯定会遭遇各种挫折与挑战,莫大的压力会让你喘不过气。可是,只有真正懂得适时弯腰的人才能得以克服危机,赢得胜利。这不是懦弱,也不是没骨气,而是一种大智慧。强干、蛮干,只会带来不可必要的损失。

《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪贴板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。
教程共两册,八十四讲。今日的内容是专题六“VBA中利用XMLHTTP完成网抓数据”的第3讲:VBA网抓数据结果的链接


VBA网抓数据结果的链接-1.jpg

第三节 利用XMLHTTP抓取百度搜索数据结果,给出打开链接

在上一讲中我们实现了利用XMLHTTP的方法抓取了搜索关键词的数据,但是我们在网络查询的时候,往往不仅需要总的数据支持,还需要一些具体的数据,比如:查找到了哪些网址,标题是什么?如果我需要进一步的查看往往要需要打开的链接。这种数据如何抓取呢?这讲我就来实现这个问题。

实现的场景:如下图当我们点击右侧的按钮“利用VBA提取搜索关键词的数据,并给出下载的链接”时能够在下面的数据区域给出查询到的结果。


VBA网抓数据结果的链接-2.jpg

其实,这种处理也是工作中经常遇到的,可以对于我们浏览的网页进行适当的保存,在需要的时候再详细的查询。特别是把这些数据保存在EXCEL表格中,更让管理条理清晰。那么如何实现这个场景呢?我们仍是利用XMLHTTP来完成我们的工作。

1 应用XMLHTTP实现数据查询并提取网页链接的思路分析

我们先模拟一下直接在网页上查询数据,当我们输入一个数据点击回车的时候,服务器会反馈回数据在我们的浏览器上,我们需要对网页的源代码进行分析,


VBA网抓数据结果的链接-3.jpg

上面的截图就是我录入“VBA语言专家”点击回车后的在后台看到的源代码,你会发现,所有我们要写入EXCEL表格的信息都出现在了这里。

其中“标题”可以用innerText属性来获得,链接可以用href的属性来获得,真的非常容易,下面我们就要实现把多页查询的结果填到excel表格中,这个时候我们利用发送给服务器时要求头部检查一下查询的时间即可如下代码:.setRequestHeader "If-Modified-Since", "0"

这样就可以实现我们的要求了。

2 应用XMLHTTP实现数据查询并提取网页链接的代码实现过程

下面我们把上面的思路转换为代码,如下所示:

Sub myNZA() '利用VBA提取搜索关键词的数据,并给出下载的链接

【具体见教程】

End Sub

代码截图:

VBA网抓数据结果的链接-4.jpg


VBA网抓数据结果的链接-5.jpg

代码讲解:

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 '五页 这是要查询5次利用i作为查询的页码

4) strURL = "https://www.baidu.com/s?"

strURL = strURL & "wd=" & UU

strURL = strURL & "&pn=" & i

上述代码是完成了我们要查询的请求URL。

5) .Open "GET", strURL, False 使用OPEN 方法

6) .setRequestHeader "If-Modified-Since", "0" 请求头部把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较,以保障我们每次请求到的数据是没有重复的。

7) .send 注意请求头部的提交要在此命令之前完成

8)objDOM.body.innerHTML = .responseText '将.responseText内容写入新objDOM对象的body

9) For Each objTitle In objDOM.getElementsByTagName("h3") 在每个H3标签即标题进行遍历操作。注意<h1> 到 <h6>是标签标题。<h1> 定义最大的标题。<h6> 定义最小的标题。

10)With objTitle.getElementsByTagName("a")(0) 对于每个属性名称为为“a”的元素

11)Cells(k, 2) = .innerText

Cells(k, 3) = .href

提取标签之间的纯文本信息和链接

12)Set objXMLHTTP = Nothing

Set objDOM = Nothing

Set objTitle = Nothing

回收内存。

3 应用XMLHTTP实现数据查询并提取网页链接的实现效果

我们先来看看当我们点击运行按钮后的实现效果:

VBA网抓数据结果的链接-6.jpg

此时我们任意点击一个单元格的链接,就会转跳到下面的页面:


VBA网抓数据结果的链接-7.jpg

从而实现了我们最初的课题要求。


本节知识点回向:如何利用XMLHTTP反馈网页中的关键词的搜索结果和网页的链接?
本讲参考程序文件:006工作表.XLSM


VBA网抓数据结果的链接-8.jpg

我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:


VBA网抓数据结果的链接-9.jpg
回复

使用道具 举报

发表于 2022-9-29 05:08:03 | 显示全部楼层 来自: 中国
转发了
回复 支持 反对

使用道具 举报

发表于 2022-9-29 05:08:13 | 显示全部楼层 来自: 北京
[赞][赞][赞]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.5

© 2001-2016 Comsenz Inc.

快速回复 返回顶部 返回列表