以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  DOM 读取网页数据 请教 有点甜 老师  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=58614)

--  作者:卧美吻花
--  发布时间:2014/10/20 21:09:00
--  DOM 读取网页数据 请教 有点甜 老师
Dim ObjIE As Object = CreateObject("InternetExplorer.Application")
Dim Tbl As Table = Tables("表A")
Dim R As Row
\'Tbl.DataTable.DataRows.Clear
StatusBar.Message1 = "正在前往网页..."
ObjIE.Navigate("http://www.knfilters.com/search/applications.aspx?prod=69-9756TFK")
Do Until ObjIE.ReadyState = 4
    Application.Doevents
Loop
Dim Dom As Object = ObjIE.Document
Dim HTMLTbl As Object = Dom.ALL.tags("cph_dl_apps")
If HTMLTbl IsNot dbnull.value Then
    Dim RowCnt As Integer = HTMLTbl.Rows.Length
    \'Tbl.StopRedraw     \'取消注释此行以提高效率
    For i As Integer = 0 To RowCnt - 1
        R = Tbl.AddNew
        R("第一列") = HTMLTbl.Rows(i).Cells(0).InnerText
        R("第二列") = HTMLTbl.Rows(i).Cells(1).InnerText
        R("第三列") = HTMLTbl.Rows(i).Cells(2).InnerText
        StatusBar.Message1 = "正在获取第 " & i + 1 & "/" & RowCnt & "行数据..."
    Next
    \'Tbl.ResumeRedraw     \'取消注释此行以提高效率
    StatusBar.Message1 = "数据获取完成..."
    ObjIE.Quit
    Msgbox("OK")
    StatusBar.Reset
Else
   StatusBar.Message1 = "获取数据失败"
End If

原始网页是这个http://www.knfilters.com/search/applications.aspx?prod=69-9756TFK
想要读取数据放到表A
看了不少关于DOM方面的资料,还是没搞懂
麻烦帮忙看一下
这里面DOM应该怎么写?

谢谢


--  作者:卧美吻花
--  发布时间:2014/10/20 21:14:00
--  
网页结构
--  作者:有点甜
--  发布时间:2014/10/20 21:23:00
--  

 如下代码,但是这个网页访问较慢,需要等候一段很长很长的时间

 

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://www.knfilters.com/search/applications.aspx?prod=69-9756TFK")
 

msgbox("开始访问")


Do Until web.ReadyState = 4
    Application.DoEvents
Loop

 

msgbox("开始读取")

 

Dim elems As object = web.Document.GetElementById("cph_dl_apps").GetElementsByTagName("table")

For i As Integer = 1 To elems.Count - 1
    Dim tdelems As object =  elems(i).GetElementsByTagName("Font")
    For j As Integer = 0 To tdelems.count - 1
        Dim str As String = tdelems(j).InnerHtml
        output.show(str)
    Next
Next


--  作者:卧美吻花
--  发布时间:2014/10/20 21:44:00
--  
这个网页读取并不慢
我发现是用DOM的反应会很慢

刚才Q群有人说用“正则表达式”会快很多,甜老师了解否?

--  作者:有点甜
--  发布时间:2014/10/20 22:05:00
--  

 跟dom无关,你自己看一下msgbox,读取确实慢。

 

 我等候完全打开,很慢的。


--  作者:lihe60
--  发布时间:2014/10/21 8:17:00
--  
以下是引用有点甜在2014-10-20 21:23:00的发言:

 如下代码,但是这个网页访问较慢,需要等候一段很长很长的时间

 

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True
web.Navigate("http://www.knfilters.com/search/applications.aspx?prod=69-9756TFK")
 

msgbox("开始访问")


Do Until web.ReadyState = 4
    Application.DoEvents
Loop

 

msgbox("开始读取")

 

Dim elems As object = web.Document.GetElementById("cph_dl_apps").GetElementsByTagName("table")

For i As Integer = 1 To elems.Count - 1
    Dim tdelems As object =  elems(i).GetElementsByTagName("Font")
    For j As Integer = 0 To tdelems.count - 1
        Dim str As String = tdelems(j).InnerHtml
        output.show(str)
    Next
Next

啥也没有执行。


--  作者:有点甜
--  发布时间:2014/10/21 9:10:00
--  

 等候一段时间。