【问题标题】:Pull data from regular tab content从常规选项卡内容中提取数据
【发布时间】:2020-04-24 11:28:52
【问题描述】:

QHarr 为另一个问题编写的这段代码正在运行,但在我的 Html 正文代码中,我有常规选项卡和移动选项卡。

此代码在“常规选项卡内容”和“移动选项卡内容”中提取 URL 的 href 代码。我只想提取常规标签内容的 href url。 HTML树形结构中有两个相互关联的节点。

<!-- regular tabs content -->

<div class="Right_Side" id="Work">
        <button class="btn-success primary btn" data-bind="visible: !$root.providerShouldAcceptDecline() &amp;&amp; !isOutsourced(), click : add">Consolidate</button>
        <div class="download">
        <a class="btn-default" href="#" data-bind="click : download, visible: $root.ViewModel.data().length > 0">
        </a>
        </div>
<div class="link">
            <a class="action" href="#" data-bind="click: $root.ViewModel.showDelete"></a>
            <a title="Before.jpg"class="app-action" style="padding-left: 0px;" href="example.com/Documents/Id=FileName=Check.jpg" target="_blank" data-bind="text:fileName">Check</a>
            <span class="data">
            <span data-bind="text:uploadDate">Second Month </span>
            </span>
            </div>
<div class="link">
            <a class="action" href="#" data-bind="click: $root.ViewModel.showDelete"></a>
            <a title="Before.jpg" class="app-action" style="padding-left: 0px;" href="example.com/Documents/Id=FileName=Check.jpg" target="_blank" data-bind="text:fileName">Check</a>
            <span class="data">
            <span data-bind="text:uploadDate">Second Month </span>
            </span>
       </div>
</div>
With IE
   .Visible = True
   .navigate "Example.com"
    While .Busy Or .readyState < 4: DoEvents: Wend
    Dim aNodeList As Object, i As Long
    Set aNodeList = IE.document.querySelectorAll(".app-action[href]")
    For i = 0 To aNodeList.Length - 1
    ActiveSheet.Cells(i + 2, 4) = aNodeList.item(i)
    Next
   'Quit '<== Remember to quit application
End With

【问题讨论】:

  • 只有一个结果还是总是两个中的第一个?以及相关节点中的两个 a 标签中的哪一个?
  • 会有多个结果,需要拉取所有的“example.com/Documents/… href="example.com/Documents/… href="example.com/Documents/… href="example.com/Documents/…)
  • 您确定您的 html 是准确复制粘贴的吗?
  • 本能告诉我可能有问题。我看到的最好的是带有 HTML 的 querySelectorAll("#Work [title]"),如图所示。如果我理解正确,这会带回一个节点太多。最后一个节点需要被忽略,因此您将循环到 .Length -2。但是,对于其他用例,我不知道这是否成立。感觉不是特别健壮。
  • For i = 0 To (ie.document.querySelectorAll("#Work [title]").Length- 2 ) /2 假设长度为偶数。 ?

标签: vba web-scraping


【解决方案1】:

您应该能够将属性 = 值选择器与父节点的 id 选择器结合使用:

For i = 0 To (ie.document.querySelectorAll("#Work [title]").Length- 2 ) /2 'assuming even length

html 看起来可能有点不对劲,所以上面只是将返回的节点列表减半(假设两个选项卡之间的分割相等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-24
    • 1970-01-01
    • 2020-01-25
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多