html - Excel VBA抓取具有相同类名的li标签

标签 html vba excel web-scraping

我正在尝试抓取共享相同类名的 li 标签 HTML 代码如下所示:

<ul class="top-section-list" data-selenium="highlightList">    
                <li class="top-section-list-item">sample text# 1</li>           
                <li class="top-section-list-item">sample text# 2</li>            
                <li class="top-section-list-item">sample text# 3</li>           
                <li class="top-section-list-item">sample text# 4</li>            
                <li class="top-section-list-item">sample text# 5</li>     
        </ul>

这是我的 VBA 代码,它只能抓取第一个列出的项目,而不能抓取其余的项目。

    Sub GetData()

    Dim objIE As InternetExplorer
    Dim itemEle As Object
    Dim data As String
    Dim y As Integer

    Set objIE = New InternetExplorer
    objIE.Visible = True

    objIE.navigate "https://www.bhphotovideo.com/c/product/1312545-REG/fujifilm_16550643_instax_mini_9_instant.html"
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

    For Each itemEle In objIE.document.getElementsByClassName("top-section-list")
    data = itemEle.getElementsByTagName("li")(0).innerText

    Next
    Range("A1").Value = data
End Sub

它只写入单元格 A1:“sample text# 1” 我怎样才能将所有标签写入单元格A1? 期望的结果是单元格 A1: 示例文本#1 示例文本#2 示例文本# 3 示例文本# 4 示例文本#5

谢谢!

最佳答案

使用.querySelectorAll并循环返回的nodeList

要使用的 CSS 选择器是

ul.top-section-list li

VBA 代码:

Option Explicit
Public Sub GetData()
    Dim objIE As InternetExplorer, nodeList As Object, currentItem As Long, outputString As String
    Set objIE = New InternetExplorer
    objIE.Visible = True
    objIE.navigate "https://www.bhphotovideo.com/c/product/1312545-REG/fujifilm_16550643_instax_mini_9_instant.html"

    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop

    Set nodeList = objIE.document.querySelectorAll("ul.top-section-list li")
    With ActiveSheet                             '<== use actual sheet name
        For currentItem = 0 To nodeList.Length - 1
            outputString = outputString & Chr$(32) & nodeList.item(currentItem).innerText
        Next currentItem
        .Cells(1, 1) = Trim$(outputString)
    End With
    'ObjIE.Quit
End Sub

CSS 查询:

CSS selector query Try it

关于html - Excel VBA抓取具有相同类名的li标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47621049/

相关文章:

vba - Excel VBA设置范围来自字符串变量

jquery - 获取字符串中 <body> </body> 的内容

vba 枚举错误 : "Invalid inside procedure."

vba - 使用 VBA 将区域格式更改为另一种语言

string - VBA 范围和字符串混淆

variables - 何时应终止 Excel VBA 变量或将其设置为 Nothing?

android - 选择 .xls/.xlsx 并读取其数据

javascript - 中心 bezierCurve html5 Canvas 绘图?

html - 如何将图像添加到网站超链接

jquery - 改变位置拉动元件