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
相关产品推荐
相关产品推荐

