天下一家·MJ

博客园 首页 新随笔 联系 订阅 管理

使用VB6创建和访问Dom树

关键字:VBDOMHTML爬虫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
'以上,
posted on 2015-06-07 21:19  天下一家·MJ  阅读(2635)  评论(0编辑  收藏  举报
友情链接Tkin的技术博客