Foxtable(狐表)用户栏目专家坐堂 → 如何获取网页里表格数据


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

主题:如何获取网页里表格数据

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


加好友 发短信
等级:幼狐 帖子:137 积分:1329 威望:0 精华:0 注册:2018/4/19 21:34:00
如何获取网页里表格数据  发帖心情 Post By:2019/9/11 10:48:00 [只看该作者]

Dim web As New System.Windows.Forms.WebBrowser()
web.ScriptErrorsSuppressed = True    '出现脚本错误
web.Navigate("https://www.ccmn.cn/historyprice/cjxh_1/")

Do Until web.ReadyState = 4
    Application.DoEvents
Loop
'取数据
Dim Cols() As String = { "序号","品名","价格区间","均价","涨跌","单位","发布日期" }
Dim elems As object = web.Document.GetElementById("list_elem").GetElementsByTagName("tr")

Dim m As Integer = 0
For Each elem As object In elems
    Dim i As Integer = -1
    
    m = m + 1
    If m > 1 Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
        Tables("长江现货").AddNew
    End If
    
    Dim tdelems As object =  elem.GetElementsByTagName("td")
    For Each tdelem As object In tdelems
        i = i + 1
        Tables("长江现货").Current(Cols(i)) = tdelem.Innertext
        Tables("长江现货").Current("录入日期") = Date.Today
        If i > 2 Then '必须要当价格区间列已经有值,才能执行以下代码
            Dim s As String = Tables("长江现货").Current("价格区间")
            Dim s2 As String = s.SubString(5,1) '价格区间中间的横杠有点特殊,不是键盘上的短横杠.所以用Asc()函数和Chr(-24150))配合来引用.
            Dim k As String = s.IndexOf(Chr(-24150)) '用Asc(s2)函数获得-的字符编码是-24150
            Tables("长江现货").Current("最高价") = s.SubString(k+1)
            Tables("长江现货").Current("最低价") = s.Remove(k)
        End If
    Next
Next
Tables("长江现货").save

这是从咱们论坛上找到的在长江现货网上自动提取数据的例子,但现在打不开了,应该是:web.Document.GetElementById("list_elem").GetElementsByTagName("tr")里list_elem和tr的名称现在不对了吧,那现在应该是什么呢,从网页上怎么查这个名称,还有后面的elem.GetElementsByTagName("td")里的td
以下是之前的例子,如何再能实现呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:网页表格数据保存到狐表表中例子.table



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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/11 11:02:00 [只看该作者]

有些网页为了防被抓数据,可能会随时更改标签和样式的。所以过一段时间就用不了很正常。

这种东西只能靠自己分析。浏览器打开这个网页,按F12大量开发者工具,自己分析网页结构

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


加好友 发短信
等级:幼狐 帖子:137 积分:1329 威望:0 精华:0 注册:2018/4/19 21:34:00
  发帖心情 Post By:2019/9/11 11:18:00 [只看该作者]

在执行“web.Navigate("https://www.ccmn.cn/historyprice/cjxh_1/")”这个代码时出现脚本错误,对抓取数据会不会有影响啊

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/11 11:40:00 [只看该作者]

这个无法确定,要看脚本是干啥用的。有些网页内容是通过脚本动态生成的,这种肯定有影响的

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


加好友 发短信
等级:幼狐 帖子:137 积分:1329 威望:0 精华:0 注册:2018/4/19 21:34:00
  发帖心情 Post By:2019/9/11 12:41:00 [只看该作者]

老师,代码结构找到了,在例子里,能不能给看下例子中的代码应该怎么调整呢?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:网页表格数据保存到狐表表中例子.table



[此贴子已经被作者于2019/9/11 12:52:30编辑过]

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/11 13:48:00 [只看该作者]

自己调试哪个节点是什么内容,应该填入哪个单元格

Dim m As Integer = 0
msgbox(elems.count)
For Each elem As object In elems
msgbox(elem.Innerhtml)
    Dim i As Integer = -1
    m = m + 1
    If m > 1 Then  '因为网页的表格有标题,如果不判断,就会增加出一个空行
        Tables("长江现货").AddNew
    End If
    
    Dim tdelems As object =  elem.GetElementsByTagName("td")
    For Each tdelem As object In tdelems
msgbox(tdelem.Innertext)
        i = i + 1
        Tables("长江现货").Current(Cols(i)) = tdelem.Innertext
……

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


加好友 发短信
等级:幼狐 帖子:137 积分:1329 威望:0 精华:0 注册:2018/4/19 21:34:00
  发帖心情 Post By:2019/9/11 14:59:00 [只看该作者]

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate("https://www.ccmn.cn/historyprice/cjxh_1/")
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("Table1") IsNot Nothing
    Application.DoEvents
Loop
msgbox("加载完成")
Dim elems As object = web.Document.GetElementById("Table1").GetElementsByTagName("tr")
msgbox(elems.count)

返回elems.count=0呢?

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/11 15:15:00 [只看该作者]

那就说明Table1这个名称的表格里没有tr这种元素的内容

 回到顶部