<!DOCTYPE html> <html> <head> <title>test</title> </head> <body> <div> <ul class="lstbox"> <li class="lst_head"><span class="col_1">姓名</span><span class="col_2">邮箱</span><span class="col_3">生日</span></li> <li class="lst_row"><span class="col_1">张三</span><span class="col_2"><a href="mailto:zhangsan@web.com" class="email">zhangsan</a></span><span class="col_3">80-5-1</span></li> <li class="lst_row"><span class="col_1">李四</span><span class="col_2"><a href="mailto:lisi@web.com" class="email">lisi</a></span><span class="col_3">85-5-1</span></li> <li class="lst_row"><span class="col_1">王五</span><span class="col_2"><a href="mailto:wangwu@web.com" class="email">wangwu</a></span><span class="col_3">90-5-1</span></li> <li class="lst_row"><span class="col_1">赵六</span><span class="col_2"><a href="mailto:zhaoliu@web.com" class="email">zhaoliu</a></span><span class="col_3">95-5-1</span></li> </ul> </div> </body> </html>
如上面的页面源码,若要提取出姓名,邮箱和生日,可下面这样做
Private Sub Command1_Click() Dim str As String Dim li, cd Dim c_name As String '遍历元素<li> For Each li In Dom.Document.getElementsByTagName("li") '用判断忽略掉列首名称的<li>行 If li.classname = "lst_row" Then '遍历<li>下的节点 For Each cd In li.childNodes '判断是否为元素节点 If cd.nodeType <> 3 Then If cd.classname = "col_2" Then '如果是第2列的<span>,那么再用firstChild取出第一个元素节点<a> str = str & cd.firstChild.href & " " Else '其他列直接输出文本 str = str & cd.innertext & " " End If End If Next str = str & vbCrLf End If Next Print str End Sub
其实就很简单的东西,主要是对HTML不是很熟悉,对node和element有点晕,下面是nodeType值说明
1 | Element | 代表元素 | Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference |
2 | Attr | 代表属性 | Text, EntityReference |
3 | Text | 代表元素或属性中的文本内容。 | None |
4 | CDATASection | 代表文档中的 CDATA 部分(不会由解析器解析的文本)。 | None |
5 | EntityReference | 代表实体引用。 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
6 | Entity | 代表实体。 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
7 | ProcessingInstruction | 代表处理指令。 | None |
8 | Comment | 代表注释。 | None |
9 | Document | 代表整个文档(DOM 树的根节点)。 | Element, ProcessingInstruction, Comment, DocumentType |
10 | DocumentType | 向为文档定义的实体提供接口 | None |
11 | DocumentFragment | 代表轻量级的 Document 对象,能够容纳文档的某个部分 | Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference |
12 | Notation | 代表 DTD 中声明的符号。 | None |