【VB6】使用VB6创建和访问Dom树【爬虫基础知识】

使用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
'以上,

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...