You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA抓取Soccer-Rating数据问题:无法单独提取日期与赛事代码

解决VBA抓取Soccer-Rating网站日期和赛事代码的问题

我懂你现在的困扰——想要单独提取日期和赛事代码,但要么只拿到赛事代码,要么两个内容混在一起。咱们先拆解下问题根源:

你目标的<td>元素结构很特殊:它里面既有独立的文本节点(就是日期12.01.19),又有一个子<div>元素(赛事代码UK3)。你之前用Children(0)时,取到的是<td>下第一个子元素(也就是那个div),所以只能拿到赛事代码;去掉Children(0)后,innerText会把<td>下所有文本内容(包括日期和div里的代码)合并输出,自然分不开。

下面是修正后的完整代码,我分步骤帮你实现单独提取日期和赛事代码:

Dim objIE As Object
Dim itemEle As Object
Dim tdRow As Object ' 重命名变量更清晰,避免和td混淆
Dim targetTd As Object
Dim i As Integer

Set objIE = CreateObject("internetexplorer.application")
objIE.Visible = True
objIE.navigate "http://www.soccer-rating.com/Manchester-City/220/"

' 等待页面加载完成
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

' 定位到目标表格(注意确认索引4是否正确,有时候页面结构可能变化)
Set itemEle = objIE.document.getElementsByClassName("bigtable")(4)

i = 0
For Each tdRow In itemEle.getElementsByTagName("tr")
    If i > 0 Then ' 跳过表头行
        Set targetTd = tdRow.getElementsByTagName("td")(1) ' 拿到包含日期和赛事代码的td
        
        ' 提取日期:获取td下的第一个文本节点,用Trim清理空白字符
        Sheet1.Cells(i, 1).Value = Trim(targetTd.FirstChild.nodeValue)
        
        ' 提取赛事代码:定位到class为ismobil的div元素
        Sheet1.Cells(i, 2).Value = targetTd.getElementsByClassName("ismobil")(0).innerText
    End If
    i = i + 1
Next tdRow

' 清理对象
Set objIE = Nothing
Set itemEle = Nothing
Set targetTd = Nothing

几个关键说明:

  • 提取日期用targetTd.FirstChild.nodeValue:FirstChild指向<td>下的第一个节点(就是日期文本),nodeValue获取这个文本节点的内容,再用Trim()去掉前后可能存在的空格或换行。
  • 提取赛事代码直接通过getElementsByClassName("ismobil")(0)定位到目标div,再取innerText就精准拿到UK3了。
  • 我把变量名做了调整(比如td改成tdRow),让代码可读性更好;同时指定了工作表Sheet1,避免默认工作表出错,你可以根据自己的需求修改。

内容的提问来源于stack exchange,提问作者plinius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:37:52