使用VB6創(chuàng)建和訪問Dom樹
關(guān)鍵字:VB,DOM,HTML,爬蟲,IHTMLDocument
我們知道,在VB中一般大家會用WebBrowser來獲取和操作dom對象。
但是,有這樣一種情形,卻讓我們糾結(jié)不已:
我們需要做爬蟲,然后爬蟲不需要太高的效率,但是我們被復(fù)雜的正則表達式給弄的頭暈眼花。
不知道何去何從。
今天,下定決心研究下html的解析,終于掌握了對IHTMLDocument等接口對象的使用。
源代碼放在:http://www.extencent.com
具體的文章將會放在博客園以及CSDN博客。主要是考慮到貼吧對代碼的支持特別的弱。
示例代碼中使用了WebCode這個類,這個類的代碼可以在以下兩個地方找到:
| 網(wǎng)站 | 網(wǎng)址 |
|---|---|
| 我的代碼分享站 | 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樹的構(gòu)建)
'真的比寫正則表達式要方便
myhtml.body.innerHTML = htmlCode
'這個時候,如果你對JavaScript操作熟悉就更好了
'我們通過getElementsByTagName這樣的操作
'來獲取含有彩票中獎信息的表格,非常方便
'不過注意,因為是根據(jù)TagName獲取的,所以是一個集合
Set tables = myhtml.getElementsByTagName("table")
'判斷集合長度超過零,說明有數(shù)據(jù),這個時候才進行下一步操作
If tables.Length > 0 Then
'大家記住了,這里操作的都是對象,所以要用Set來進行賦值。
'這里,我們獲取到了第一個表格對象
'因為經(jīng)過觀察,中獎信息就在第一個表格中
Set table = tables(0)
'如果這個表格有超過3行,才繼續(xù)提取信息
'為什么?因為第一行,第二行都是表格標(biāo)題部分
'這個大家可以去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
'以上,
浙公網(wǎng)安備 33010602011771號