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
但是这样仅仅是将网页打开,我们还需要等待网页加载完毕才能获取数据;那么加入以下语句即可
While IE.readyState <> 4 Or IE.Busy = TrueDoEvents
Wend
现在就分为两种情况了:
1.
如果数据就在网页中,不需要进行额外的操作(比如填入文本/点击按钮等操作)
那么可以通过如下代码,获得网页中的全部文字
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是截取长度;即最终得到的字符串为alltxt[pos...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进行操作了
使用如下代码,就可以将字符串输入到百度的搜索框中
IE.Document.getElementById("kw").Value = "LiuRunky cnblogs"
这行代码的意思是,获取id为"kw"的元素,并将它的值设为某字符串
运行后即可产生如下效果
按下按钮的操作也是类似的,先获取“百度一下”按钮的id
可以得到type为"submit",id为"su"
那么使用如下代码即可完成点击的动作
IE.Document.getElementById("su").Click
接下来就是和1中一样的字符传操作了
假设我们已经把各种字符串操作完成了,已经获得了所需要的信息,那么如何将其存到表格中呢?
其实很简单,因为VBA也可以方便的操作Excel表格
Cells(row, col) = result
这行代码的意思是,将result(可以是String、Integer等各种类型)填到表格中的第$row$行第$col$列
如果想爬取很多个数据,那么在最外面设置一些for循环,就可以依次执行上述流程、然后将信息填入对应表格项中
大致的流程就是这样了
(完)
vba获取html代码数据,用VBA实现网页数据获取相关推荐
- vba获取html代码数据,VBA获取网页表格数据
'获取中国地震网的地震信息 Option Explicit 'http://data.earthquake.cn/datashare/globeEarthquake_csn.html Sub WebI ...
- Python量化交易实战-10实时获取股票的数据函数封装
B站配套视频教程观看 实时获取股票的数据函数封装 实现股票数据获取的模块及方法 从这节课开始 我们就开始构建所谓的量化交易系统,量化交易平台功能模块. 上面是量化交易系统的功能模块图,主要分为3块,第 ...
- Excel 2010 VBA 入门 037 获取最后一行数据的行数
目录 示例: 实现代码1 使用Find方法查找最后的单元格 Find方法按行查找和按列查找的区别 实现代码2 获取工作表总行数 实现代码3 单元格对象的End属性 End属性的局限性 其他获取最后数据 ...
- VBA获取数据区域的行列数
VBA获取数据区域的行列数 方法1 方法2 方法1 ActiveSheet.UsedRange.Rows.Count ActiveSheet.UsedRange.Columns.Count 缺点:把最 ...
- AutoCAD VBA 获取单个转角标注的相关数据。
AutoCAD VBA 获取单个转角标注的相关数据.@TOC 菜鸟献丑了,请多指教! 这是一个在AutoCAD VBA中获取转角标注关键点数据的方法. DXF不会弄,只能用这个土方法.不是很标准规范, ...
- excel vba区域求和 获取筛选后数据行号 获取筛选后行号总数
获取筛选后行号总数 Sub get_total_filer_count()Dim rngCell As RangeDim lngRowCnt As LongFor Each rngCell In [a ...
- vba二维数组初始化_将工作表数据写入VBA数组
大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第四个专题"EXCEL工作表数据的读取.回填和 ...
- keil debug如何在watch直接修改变量值_零基础学VBA:什么是VBA?如何编写和运行VBA代码?...
HI,大家好,我是星光,今天咱们来继续学习VBA.在上一章咱们讲了为什么要学习VBA~VBA还值不值得学~学了还有没有用~零基础学VBA编程01:VBA还能不能学?学了还有没有用? 这一章咱们再来简单 ...
- vba抓取html文件数据,VBA抓取PDF数据
Excel VBA如何批量获取PDF文件中的内容 VBA能不能在pdf文件的内容中提取所需要的内容建议把人工操作步骤,写成按键精灵程序去半自动化完成.vba对pdf处理极弱,python也好不了太多. ...
最新文章
- AttributeError: ‘tuple‘ object has no attribute ‘group‘
- MyBatis之传入参数——parameterType(转)
- Hadoop RPC protocol description--转
- 关于微信公众号小程序在运营过程中的注意事项
- beam search算法
- 使用udp协议实现服务器端程序时,用VisualC#实现UDP协议(二)
- linux_nmon监控教程,如何使用Nmon监控Linux系统性能
- html5指南--1.html5全局属性(html5 global attributes)
- postgresql 编写函数实现 获取中文姓名全拼
- 了解开源图表组件FusionChartsFree
- win7资源监视器介绍
- oracle sql 查询全年日期,oracle下sql创建指定年份全年日期表(区分工作日)
- optionsAPI与compositionAPI
- C语言课程设计大作业——学生管理系统(详细含报告和源码)
- 计算机cpu执行时间 指令条数的单位,计算机原理2015年10月真题(02384)
- laya-oppo 广告问题ad had showd, please reload
- redis中 Could not get a resource from the pool 异常解决
- zigbee设备类型
- 2020作为一个资深的Android开发者需要掌握哪些技能?
- 利用Python进行股票交易分析(三):A股量化交易策略的验证及数据分析。