VBA网页抓取问题:提取嵌套HTML标签中的日期与事项至Excel列
解决VBA提取HTML日期和事项到Excel分列的问题
我看了你的代码,问题出在你把所有<li>的文本都拼接成了一个字符串,然后一次性塞进A1单元格,自然没法区分日期和事项啦。下面是修改后的代码,能把每个条目里的日期和事项分别写到Excel的A列和B列,逐行对应:
Sub GetDat() Dim IE As New InternetExplorer, html As HTMLDocument Dim elem As Object, dateElem As Object, itemElem As Object Dim rowNum As Integer ' 控制Excel写入的行号 With IE .Visible = True .navigate "https://www.MyURL/sc/wo/Worders/index?id=76888564" Do While .readyState <> READYSTATE_COMPLETE: Loop Set html = .document End With rowNum = 1 ' 从第1行开始写入 ' 遍历simple-list下的每个li条目 For Each elem In html.getElementsByClassName("simple-list")(0).getElementsByTagName("li") ' --- 这里需要根据你的实际HTML结构调整选择器 --- ' 假设日期在li下的class为"date"的span标签里 On Error Resume Next ' 防止元素不存在报错 Set dateElem = elem.getElementsByClassName("date")(0) ' 假设事项在li下的class为"item-content"的div标签里 Set itemElem = elem.getElementsByClassName("item-content")(0) On Error GoTo 0 ' 如果日期和事项元素都存在,就写入Excel If Not dateElem Is Nothing And Not itemElem Is Nothing Then Cells(rowNum, 1).Value = Trim(dateElem.innerText) ' A列写日期,Trim去掉多余空格 Cells(rowNum, 2).Value = Trim(itemElem.innerText) ' B列写事项 rowNum = rowNum + 1 ' 行号加1,准备写下一条 End If ' 清空对象变量,避免残留 Set dateElem = Nothing Set itemElem = Nothing Next elem IE.Quit MsgBox "数据提取完成!" ' 可选:提示完成 End Sub
关键修改说明:
- 新增
rowNum变量,用来控制每一条数据写入Excel的行号,处理一条就自动换行 - 针对每个
<li>内部的日期元素和事项元素分别提取文本(你需要根据实际HTML结构调整getElementsByClassName里的类名,或者用getElementsByTagName等选择器) - 加入了错误处理,避免因为某个条目里缺少日期/事项元素导致代码崩溃
- 用
Trim去掉文本前后的多余空格,让数据更整洁
注意事项:
如果你的HTML结构不是用class区分日期和事项,比如日期是<li>里的第一个<span>,事项是第二个<div>,那可以把选择器改成:
Set dateElem = elem.getElementsByTagName("span")(0) Set itemElem = elem.getElementsByTagName("div")(0)
总之要根据你实际的HTML结构调整元素定位的代码哦~
内容的提问来源于stack exchange,提问作者TCritical
相关产品推荐
相关产品推荐

