网站首页 > 资源文章 正文
运用WebBrowser控件打开Web页面,并提取页面数据成为当今数据收集的主要手段。EXCEL VBA网页数据抓取和处理基本过程如下:
- 运用WebBrowser控件打开Web页面
- 解析文档或字符串
- 将抓取的网页数据按格式要求写入EXCEL表格
- 通过EXCEL表格函数或EXCEL VBA编程进行数据数理
本文介绍开发一个简单的WebBrowser控件网页数据抓取工具来实现EXCEL VBA网页数据抓取的基本过程。
1、运用WebBrowser控件打开Web页面
I、建立窗体如下图
窗体由控件解释:
- CommandButton1:【打开网页】命令按钮;
- CommandButton2:【网页数据抓取】命令按钮;
- TextBox1:网址文本框(单行)
- TextBox2:网页HTML文档文本框(多行)。设置Multiline属性为True、ScrollBars属性为2;
- WebBrowser1:网页控件
II、打开Web页面
- 打开窗体后运用窗体初始化事件Initialize加载指定网页
Private Sub UserForm_Initialize()
WebBrowser1.Navigate "http://www.galaxystatistics.com/excel/excelVBA2.html"
End Sub
- 打开窗体时运用CommandButton1【打开网页】命令按钮打开TextBox1网址文本框中指定的网页
Private Sub CommandButton1_Click()
WebBrowser1.Navigate TextBox1.Text
End Sub
- 网页加载成功后执行WebBrowser1的DocumentComplete事件,在TextBox2文本框显示网页HTML文档
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Dim doc As Object
Set doc = WebBrowser1.Document
TextBox2.Text = doc.DocumentElement.innerHTML
TextBox2.SetFocus
End Sub
通常,使用浏览器打开网页后,在页面点击鼠标右键,弹出菜单如此,
点击【查看网页源代码(V)】,可以查看网页HTML文档。
本文案例网页为“http://www.galaxystatistics.com/excel/excelVBA2.html”,文档如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Excel Train</title>
<meta charset="utf-8"/>
<style>
.testTB{color:#ff0000;}
</style>
<script type="text/javascript">
function oSum(x,y) {
return x+y;
}
//无参数调用
function alertNull(){
alert("WebBrowser call!");
}
//有参数调用
function callWithPar(name, address) {
alert("Name is " + name + "; address is " + address);
}
</script>
</head>
<body scroll="yes" bgcolor="#E3F3F9" style="border:none">
<h4>表格一</h4>
<table id="myTB2" class="testTB" border=0 cellspacing=0 cellpadding=5 width="100%" style="border-top:2px solid #000000; border-bottom:2px solid #000000; width:50%;">
<tr><th style="border-right:1px solid #000000;">产量</th><th style="border-right:1px solid #000000;">人数</th><th>累计人数</th></tr>
<tr>
<td style="border-top:1px solid #000000; border-right:1px solid #000000;">4</td>
<td style="border-top:1px solid #000000; border-right:1px solid #000000;">8</td>
<td style="border-top:1px solid #000000;">8</td>
</tr>
<tr>
<td style="border-right:1px solid #000000;">5</td>
<td style="border-right:1px solid #000000;">22</td>
<td>30</td>
</tr>
<tr>
<td style="border-right:1px solid #000000;">6</td>
<td style="border-right:1px solid #000000;">42</td>
<td>72</td>
</tr>
<tr>
<td style="border-right:1px solid #000000;">7</td>
<td style="border-right:1px solid #000000;">38</td>
<td>110</td>
</tr>
<tr>
<td style="border-right:1px solid #000000;">8</td>
<td style="border-right:1px solid #000000;">17</td>
<td>127</td></tr>
<tr>
<td style="border-right:1px solid #000000;">9</td>
<td style="border-right:1px solid #000000;">3</td>
<td>130</td>
</tr>
<tr>
<td style="border-top:1px solid #000000; border-right:1px solid #000000;">合计</td>
<td style="border-top:1px solid #000000; border-right:1px solid #000000;">130</td>
<td style="border-top:1px solid #000000;">***</td>
</tr>
</table>
<p>
<h4>表格二</h4>
<table class="testTB" border=1 cellspacing=0 cellpadding=5 width="50%">
<tr><th>姓名</th><th>民族</th></tr>
<tr><td>张三</td><td>汉族</td></tr>
<tr><td>李四</td><td>回族</td></tr>
</table>
<form name="myFc">
<h4>表格三</h4>
<table>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#a51020;">1、文本框</th></tr>
<tr><td> 姓名:</td><td><input id="myName" style="width:100px; color:#ff0000;" value="张三" onchange="alert(111)"/></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">2、单选按钮</th></tr>
<tr><td> 性别:</td><td><input type="radio" name="myGender" value="1" checked/>男 <input type="radio" name="myGender" value="0"/>女</td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">3、复选框</th></tr>
<tr><td> 爱好:</td><td><input type="checkbox" name="myLike" value="1"/>篮球 <input type="checkbox" name="myLike" value="2"/>游泳 <input type="checkbox" name="myLike"
value="3"/>跑步</td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">4、下拉列表</th></tr>
<tr><td> 专业:</td><td><select id="myMajor">
<option value="1">数学</option>
<option value="2">统计学</option>
<option value="3">寿险精算</option>
<option value="4">R语言</option>
</select></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">5、多行文本</th></tr>
<tr><td> 简介:</td><td>
<textarea id="myIntroduction" style="width:300px; height:100px; color:#555555;">
WebBrowser控件是Internet Explorer的主窗口,它是作为一个ActiveX控件来包装的。用户可以使用WebBrowser控件打开任何IE能够显示的Web页面,并提取页面数据。如有自己的网站,可运用WebBrowser控件实现
EXCEL文档和服务器间数据交换
</textarea></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">6、DIV区块</th></tr>
<tr><td> 效果:</td><td>
<div id="myEffect" style="width:300px; height:50px; border:#aaaaaa 1px solid; dsiplay:inline;">
<b style="text-align:center; width:100%; padding-top:15px;">这是黑体效果</b>
</div></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">7、图片</th></tr>
<tr><td> 头像:</td><td><img src="http://studio.galaxystatistics.com/shiny/rSHIndex/pic/vba1.jpg" id="myImg" style="width:200px; height:260px; color:#ff0000;"/></td></tr>
<tr><th colspan=2 style="text-align:left; font-size:10pt; color:#e51020;">8、内崁iFrame框架</th></tr>
<tr><td> 框架:</td><td><iframe src="http://www.galaxystatistics.com/excel/excelVBA1.html" id="myIframe" style="width:380px; height:260px; color:#ff0000;"/></td></tr>
</table>
</form>
</body>
</html>
2、解析HTML文档
WebBrowser控件网页数据抓取必须具备一定基础的网页编程知识。通常,网页数据抓取的对象为网页中的table标签,统计数据往往以表格形式来呈现。
I、通过table标签的id属性抓取表格数据
网页中任何标签都可以设定id属性做为唯一标识,对于设定id属性的HTML标签,可以用DOM文档模型的Document.getElementById获得该标签。
案例网页为“http://www.galaxystatistics.com/excel/excelVBA2.html”中第一个table标签为,
<h4>表格一</h4>
<table id="myTB2" class="testTB" border=0 cellspacing=0 cellpadding=5 width="100%">
...
</table>
这里table标签的id属性为id="myTB2",CommandButton2【网页数据抓取】命令按钮代码如下:
Private Sub CommandButton2_Click()
Dim tbRows As Integer
Dim tbCols As Integer
Dim i, j As Integer
'通过id属性获得table标签对象
Set doc = WebBrowser1.Document.getElementById("myTB2")
'获得表格行数
tbRows = doc.Rows.Length
'获得表格列数
tbCols = doc.Rows(0).Cells.Length
Sheet1.Cells.Clear
For i = 0 To tbRows - 1
For j = 0 To tbCols - 1
'按行、列将表格数据写入EXCEL表格
Sheet1.Cells(i + 1, j + 1) = doc.Rows(i).Cells(j).innerText
Next j
Next i
End Sub
II、通过table标签集合抓取表格数据
有时网页中要抓取的标签没设定id属性,这时可通过DOM文档模型的Document.getElementsByTagName获得该标签集合。CommandButton2【网页数据抓取】命令按钮代码如下:
Dim tables As Object
' 获取文档中所有的table集合
Set tables = WebBrowser1.Document.getElementsByTagName("table")
' 获取文档中第2个table对象
Set doc = tables(1)
Dim tbRows As Integer
Dim tbCols As Integer
Dim i, j As Integer
tbRows = doc.Rows.Length
tbCols = doc.Rows(0).Cells.Length
Sheet1.Cells.Clear
For i = 0 To tbRows - 1
For j = 0 To tbCols - 1
Sheet1.Cells(i + 1, j + 1) = doc.Rows(i).Cells(j).innerText
Next j
Next i
解析HTML文档是一个人机对话过程,开发者需要对HTML文档结构和EXCEL VBA编程有足够的经验。
这里介绍了网页table标签中数据抓取的方法,对于其它网页标签(div、textarea、img等),基本都可以有DOM的Document.getElementById和Document.getElementsByTagName方法获得抓取对象。至于不同网页标签的进一步解析,则需要对HTML文档结构有一定程度的了解。
本文代码使用InternetExplorer运行通过,如果使用Chrome浏览器或Firefox浏览器加载网页,HTML文档解析过程可能略有区别。
参考文章:
猜你喜欢
- 2025-01-21 「软帝学院」java常用词汇分享第二弹
- 2025-01-21 重磅|30秒全新光谷形象片来了!凤凰卫视全球推介中~
- 2025-01-21 python实现登录12306网站查看火车票信息
- 2025-01-21 nginx安装
- 2025-01-21 跟我一起学设计(CAD2016 命令巧记)
- 2025-01-21 C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (2)
- 2025-01-21 宝藏干货|研究生工具网站推荐
- 2025-01-21 从0开始学习KVM-KVM学习笔记(2)- CentOS 配置网络yum源
- 2025-01-21 网页版VS Code来了,特斯拉Xbox手机都能用,随时随地写bug
- 2025-01-21 使用Selenium爬取淘宝商品(绕过登录页面)、自动秒抢淘宝商品
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)