【问题标题】:Unable to use querySelector within querySelectorAll container in the right way无法以正确的方式在 querySelectorAll 容器中使用 querySelector
【发布时间】:2020-12-06 00:20:03
【问题描述】:

我正在尝试弄清楚如何在 .querySelectorAll() 上使用 .querySelector()

例如,当我这样尝试时,我得到了预期的结果:

Sub GetContent()
    Const URL$ = "https://stackoverflow.com/questions/tagged/web-scraping?tab=Newest"
    Dim HTMLDoc As New HTMLDocument
    Dim HTML As New HTMLDocument, R&, I&
    
    With New XMLHTTP60
        .Open "Get", URL, False
        .send
        HTMLDoc.body.innerHTML = .responseText
    End With

    With HTMLDoc.querySelectorAll(".summary")
        For I = 0 To .Length - 1
            HTML.body.innerHTML = .Item(I).outerHTML
            R = R + 1: Cells(R, 1).Value = HTML.querySelector(".question-hyperlink").innerText
        Next I
    End With
End Sub

当我选择另一个站点以获取表中可用的Rank 列下的值时,脚本不再起作用,即使我使用相同的逻辑:

Sub GetContent()
    Const URL$ = "https://www.worldathletics.org/records/toplists/sprints/100-metres/outdoor/men/senior/2020?page=1"
    Dim HTMLDoc As New HTMLDocument
    Dim HTML As New HTMLDocument, R&, I&

    With New XMLHTTP60
        .Open "Get", URL, False
        .send
        HTMLDoc.body.innerHTML = .responseText
    End With

    With HTMLDoc.querySelectorAll("#toplists tbody tr")
        For I = 0 To .Length - 1
            HTML.body.innerHTML = .Item(I).outerHTML
            R = R + 1: Cells(R, 1).Value = HTML.querySelector("td").innerText
        Next I
    End With
End Sub

这是我正在谈论的两个脚本中的Cells(R, 1).Value = HTML.querySelector().innerText 行。我在这个容器中使用相同的.querySelectorAll()

如果我在.getElementsByTagName() 上使用.querySelector(),我发现它可以工作。我还发现在TagName 上使用TagName 或在ClassName 上使用ClassName 等取得了成功。因此,我可以通过几种不同的方式获取内容。

如何在第二个脚本中在 .querySelectorAll() 上使用 .querySelector() 以使其正常工作?

【问题讨论】:

    标签: vba web-scraping selectors-api queryselector


    【解决方案1】:

    将其包装在表格标签中,以便 html 解析器知道如何处理它。

    HTML.body.innerHTML = "<table>" & .Item(I).outerHTML & "</table>"
    

    这样做会保留开始 td 标记的结构,否则会去掉“

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多