【问题标题】:getting Data from a page that doesn't show table [closed]从不显示表格的页面获取数据[关闭]
【发布时间】:2018-03-03 18:26:31
【问题描述】:

我正在尝试将网站上的实时数据导入我的 Excel 电子表格。唯一的问题是,当我通过 Excel 中的获取数据访问网页时,无法识别表格。我只能导入整个页面,即使那样它也没有得到我需要的数据。如果提供了 URL,我想运行一个宏来获取数据,因为页面太多,无法手动完成。

为了比较,我尝试导入的数据是来自不同博彩公司的所有赔率,这是一个示例 https://www.oddschecker.com/tennis/kaitlyn-christian-sabrina-santamaria-v-tatjana-maria-heather-watson/winner

或者这个网站https://easyodds.com/tennis/atp/acapulco-mexico/928015/match-result任何一个都可以

我真的很感激能对此有所了解。谁能帮忙!!

为什么你的解决方案不适合我真的很奇怪:

enter image description here enter image description here

【问题讨论】:

  • 如果我从一个网站获得一个 iFrame 小部件怎么办,这个网站提供的正是我所需要的,但要获得 Xml 提要,它是付费的。他们确实提供了一个 iframe,可以免费显示我需要的所有数据;我可以将其导入到理论上表现出色吗?我知道我必须先在网站上设置它...
  • 哪里说免费的 iframe?
  • 需要一些时间才能拿到它,因为我需要申请它,所以我现在只对上述网站之一感兴趣。你觉得有可能吗?
  • 您的第一个链接当然是可能的。您只需对 excel 识别为日期的赔率值进行一些修正。您可以循环输出以使用 If Not IsEmpty(currCell) And InStr(1, currCell.Text, "/") = 0 And currCell.Row > 2 Then Dim tempString As String tempString = Format$( currCell.Text, "yyyy-mm-dd") Debug.Print Right$(tempString, 2) & "/" & Mid$(tempString, 6, 2) 。其中 currCell.Row > 2, 2 恰好是表头行
  • 我确实提取并获得了赔率,但现在就寝:-)

标签: jquery excel vba excel-web-query


【解决方案1】:

好的。这是您的第一个链接的解决方案。

我可以稍微整理一下输出,但它会让你开始。

选择一个活动表并将引用添加到 MS XML 和 MS HTML 库。

参考文献

代码

Option Explicit

Sub test4()

    Dim html As New HTMLDocument, http As New XMLHTTP60

    With http
        .Open "GET", "https://www.oddschecker.com/tennis/kaitlyn-christian-sabrina-santamaria-v-tatjana-maria-heather-watson/winner", False
        .Send
        html.body.innerHTML = .ResponseText
    End With

    Dim allRowOfData As Object

    Set allRowOfData = html.getElementsByClassName("at-12 standard-list")(0)

    Dim r As Long, c As Long

    Dim curHTMLRow As Object

    Dim counter As Long
    counter = 1

    For r = 0 To allRowOfData.Rows.Length - 1

        Set curHTMLRow = allRowOfData.Rows(r)

        Dim tblCell As HTMLTableCell

        For Each tblCell In curHTMLRow.Cells

          If Not tblCell.innerText = "1" And Not tblCell.innerText = "2" And Len(tblCell.innerText) > 0 Then
           ActiveSheet.Range("A" & counter).Value = Application.WorksheetFunction.Substitute(tblCell.innerText, "/", " over ")
           counter = counter + 1
          End If

        Next tblCell

    Next r

End Sub

结果:

【讨论】:

  • 非常感谢 QHarr,但是当我在 Set allRowOfData = html.getElementsByClassName("at-12 standard-list")(0) 上运行它时遇到运行时错误 438很奇怪,因为当我尝试运行脚本以按类名而不是标签名获取元素时,我遇到了同样的错误。有什么想法吗?
  • 我也找不到你引用的类名,所以我可以尝试更改它
  • 你在使用“oddschecker.com/tennis/…
  • 是的,我不确定我错过了什么。我复制了与您编写的完全相同的代码,只是更改为另一个赔率检查器网址,因为该网址已过期。我可能在 Excel 中缺少某个功能或类似的东西?
  • 该 URL 尚未过期。我刚试过。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
相关资源
最近更新 更多