vba获取html代码数据,⽤VBA实现⽹页数据获取
做某个学校⼤作业的时候,需要查接近$500$个数据;⼿动是不太现实的
于是通过⽹上冲浪到了使⽤VBA的实现⽅法,在这⾥稍微总结下
VBA就是Microsoft Office / WPS Office中可以使⽤的Visual Basic插件;利⽤插件可以实现各种数据的获取和处理,并最终将数据存到Excel中
如果根据教程正确完成安装后,点开Excel的“开发⼯具”选项,就能发现“”VB编辑器”选项已经是可以选中的了
点开,进⼊VB编辑器
之后在左侧的资源视图中,右击Project,选中插⼊>模块
即可进⼊输VB代码的界⾯了
接着,需要进⼊⼯具>引⽤
这类似C++中的include,使⽤预设好的轮⼦
在我们的需求中,需要引⽤如下内容
(默认之外的有Microsoft HTML Object Library和Microsoft Internet Controls)
之后就是敲代码了
最基本的,我们需要先定义主函数
SubMain()Rem:在这⾥写代码
End Sub
由于我们需要从⽹上获取数据,那么就需要利⽤VBA对于IE浏览器的⽀持了
按照这样的⽅法进⾏定义
Dim IE As Object
那么如何打开⼀个⽹页呢?
使⽤如下语句,就可以打开⼀个⽹页(⽹址为url)
Dim url As Stringurl= "这⾥是⽹址"
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible= TrueIE.navigate url
但是这样仅仅是将⽹页打开,我们还需要等待⽹页加载完毕才能获取数据;那么加⼊以下语句即可
adyState <> 4 Or IE.Busy = TrueDoEvents
Wend
现在就分为两种情况了:
1.
如果数据就在⽹页中,不需要进⾏额外的操作(⽐如填⼊⽂本/点击按钮等操作)
那么可以通过如下代码,获得⽹页中的全部⽂字
html网页设计期末大作业Dim alltxt As Stringalltxt= IE.document.body.innerText
alltxt中会包含各种标题、⽂字、甚⾄页眉页脚,那么就需要进⾏字符串操作获得所需信息了
不过由于⼀般所查询的⽹页中,所需信息出现的位置⼀般是相同的,那么我们可以定位到信息⼤致出现的位置,将那⾥的东西截取出来介绍⼀些VB中常⽤的字符串操作(与C++不同,VB中String的下标是从$1$开始的 ):
(1) 遍历字符串的循环
For i = 1 To Len(alltxt)Rem: 在这⾥进⾏各种骚操作
Next i
(2) 截取⼦串
Dim substr As Stringsubstr= Mid(alltxt, pos, len)
其中alltxt是被截取的字符串,pos是起始下标(从$1$开始),len是截取长度;即最终得到的字符串为pos+len-1]
如果想要拿的是单个字符的话,也必须使⽤String变量(因为VB中貌似没有C++中char⼀样的变量)
(3) 字符⽐较
⼀个简单的例⼦如下
Dim ch As Stringch= "e"
Dim flag As String
If ch > "f" Thenflag= "YES"
Elseflag= "NO"
End If
运⾏过这个If语句后,flag="NO"
(4) MessageBox的使⽤
⼀般⽤于输出结果以调试(毕竟没有控制台)
MsgBox (flag)
MessageBox的括号中的内容,可以使⽤String相加的形式表⽰String的拼接
MsgBox (str1 + str2 + str3)
2. 如果所需要的信息并不直接出现在打开的⽹页中,那么就需要使⽤⼀点点其他的功能
以百度搜索为例,我们需要两个步骤来解决问题:先在输⼊框中填⼊待查询信息,再点击“百度⼀下”按钮
⽤⼤多数浏览器时,我们都可以按F12打开⽹页资源浏览器(Chrome、IE都是可以的)
使⽤该界⾯中左上⽅的追踪按钮
再点击⼀下对话框,就资源浏览器中就会显⽰对话框的html代码
需要注意这⾏html
这⾏说的是这个事情:这个对话框是个input,它的id是"kw",name是"wd",class是"s_ipt",再之后的属性对于我们的需求不是很重要有了id,name,class,我们就可以使⽤VBA进⾏操作了
使⽤如下代码,就可以将字符串输⼊到百度的搜索框中
ElementById("kw").Value = "LiuRunky cnblogs"
这⾏代码的意思是,获取id为"kw"的元素,并将它的值设为某字符串
运⾏后即可产⽣如下效果
按下按钮的操作也是类似的,先获取“百度⼀下”按钮的id
可以得到type为"submit",id为"su"
那么使⽤如下代码即可完成点击的动作
ElementById("su").Click
接下来就是和1中⼀样的字符传操作了
假设我们已经把各种字符串操作完成了,已经获得了所需要的信息,那么如何将其存到表格中呢?
其实很简单,因为VBA也可以⽅便的操作Excel表格
Cells(row, col) = result
这⾏代码的意思是,将result(可以是String、Integer等各种类型)填到表格中的第$row$⾏第$col$列
如果想爬取很多个数据,那么在最外⾯设置⼀些for循环,就可以依次执⾏上述流程、然后将信息填⼊对应表格项中⼤致的流程就是这样了
(完)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论