Foxtable(狐表)用户栏目专家坐堂 → DOM 读取网页数据 请教 有点甜 老师


  共有4519人关注过本帖树形打印复制链接

主题:DOM 读取网页数据 请教 有点甜 老师

帅哥哟,离线,有人找我吗?
卧美吻花
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:187 积分:1469 威望:0 精华:0 注册:2012/6/8 9:34:00
DOM 读取网页数据 请教 有点甜 老师  发帖心情 Post By:2014/10/20 21:09:00 [只看该作者]

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应该怎么写?

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
卧美吻花
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:187 积分:1469 威望:0 精华:0 注册:2012/6/8 9:34:00
  发帖心情 Post By:2014/10/20 21:14:00 [只看该作者]

网页结构

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
卧美吻花
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:187 积分:1469 威望:0 精华:0 注册:2012/6/8 9:34:00
  发帖心情 Post By:2014/10/20 21:44:00 [只看该作者]

这个网页读取并不慢
我发现是用DOM的反应会很慢

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/20 22:05:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
lihe60
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:6885 积分:43595 威望:0 精华:0 注册:2009/3/2 14:07:00
  发帖心情 Post By: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

啥也没有执行。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/10/21 9:10:00 [只看该作者]

 等候一段时间。


 回到顶部