使用VB6创建和访问Dom树
关键字:VB,DOM,HTML,爬虫,IHTMLDocument
我们知道,在VB中一般大家会用WebBrowser来获取和操作dom对象。
但是,有这样一种情形,却让我们纠结不已:
我们需要做爬虫,然后爬虫不需要太高的效率,但是我们被复杂的正则表达式给弄的头晕眼花。
不知道何去何从。
今天,下定决心研究下html的解析,终于掌握了对IHTMLDocument等接口对象的使用。
源代码放在:http://www.extencent.com
具体的文章将会放在博客园以及CSDN博客。主要是考虑到贴吧对代码的支持特别的弱。
示例代码中使用了WebCode这个类,这个类的代码可以在以下两个地方找到:
网站 | 网址 |
---|---|
我的代码分享站 | http://www.extencent.com/ |
CSDN代码片 | https://code.csdn.net/snippets/686971 |
- Private Sub btnTryLuck_Click()
- 'HTML代码
- Dim htmlCode As String
- 'html Dom树对象
- Dim myhtml As New HTMLDocument
- 'html IHTMLElementCollection 对象集合
- Dim tables As IHTMLElementCollection
- 'html HTMLTable 表
- Dim table As HTMLTable
- 'html HtmlRow 行
- Dim row As HTMLTableRow
- 'html HTMLTableCell 单元格
- Dim cell As HTMLTableCell
- 'define temp variables
- Dim i As Long
- '获取HTML代码
- htmlCode = mWeb.GetHttpCode("http://kaijiang.zhcw.com/zhcw/html/ssq/list.html","smart")
- '加载HTML代码到dom树(通过这个赋值的方法,就完成了DOM树的构建)
- '真的比写正则表达式要方便
- myhtml.body.innerHTML = htmlCode
- '这个时候,如果你对JavaScript操作熟悉就更好了
- '我们通过getElementsByTagName这样的操作
- '来获取含有彩票中奖信息的表格,非常方便
- '不过注意,因为是根据TagName获取的,所以是一个集合
- Set tables = myhtml.getElementsByTagName("table")
- '判断集合长度超过零,说明有数据,这个时候才进行下一步操作
- If tables.Length > 0 Then
- '大家记住了,这里操作的都是对象,所以要用Set来进行赋值。
- '这里,我们获取到了第一个表格对象
- '因为经过观察,中奖信息就在第一个表格中
- Set table = tables(0)
- '如果这个表格有超过3行,才继续提取信息
- '为什么?因为第一行,第二行都是表格标题部分
- '这个大家可以去Chrome上面看DOM树。
- If table.rows.Length > 3 Then
- '我们从序号2开始(也就是第三行,别忘了是从0开始的)
- For i = 2 To table.rows.Length - 2
- '这里同样是Set,获取了某一行
- Set row = table.rows(i)
- '这里,将第3个(序号为2)单元格中的文本输出
- Debug.Print row.cells(2).innerText
- Next i
- End If
- End If
- End Sub
- '以上,