【问题标题】:How to scrape online data from within a span tag如何从跨度标签中抓取在线数据
【发布时间】:2019-04-25 11:54:57
【问题描述】:

我正在尝试获取“单程附加费”描述所定义的值 R1200。我尝试使用各种获取元素的方法,但无法获取信息。这个想法是,我想获取 1200 值并将其粘贴到 Excel 中的单元格中。我是 vba 和 html 的新手。

我已经设法让抓取工具通过单击相关输入导航到有问题的特定网页,下面是我试图获取值的示例代码。

这是值所在的 HTML:

<div class="itinerary-column">
<div class="optional-extras">
<h4>
Price Summary
</h4>
<ul class="clearfix extras">

<li>
Document admin fee<span>R 99.00</span>
</li>
<li>
Vehicle Rental <span>R 1575.00</span>
</li>
<li>
<!--This is part of the temporary solution to show the oneway surcharge-->
One Way Drop Off Surcharge<span>R 1200.00</span>
</li>
</ul>
</div>
<div class="total-price clearfix">
Total

<span>
R
<span class="value">
2874.00
</span>
</span>
</div>
<div class="deposit">
<div class="clearfix">
<div class="deposit-req">
Deposit required
<span>(Not included in total)</span>
</div>
<div class="value">
R <span>4170.20</span>
</div>
</div>
</div>
<div class="excess-message">
Rate incl 200 KMS free per day.Extra @ ZAR2.12 p k
</div>

</div>

这是我试图获取值的代码:

'Cells(r, 3).Value = appIE.document.getElementsByClassName("optional-extras").innerHTML
'Cells(r, 2).Value = appIE.document.getElementsByClassName("optional-extras").innerText
Cells(r, 6).Value = appIE.document.getElementsByClassName("optional-extras").innerHTML
Cells(r, 6).Value = appIE.document.getElementsByClassName("clearfix extras").innerHTML
'Cells(r, 4).Value = appIE.document.getElementsByClassName("clearfix extras").innerText
'Cells(r, 5).Value = appIE.document.getElementsByClassName("clearfix extras").innerHTML
'Cells(r, 6).Value = appIE.document.getElementsByTagName("ul").Item(25).innerText   'yields something

【问题讨论】:

  • 你试过getElementByClassName("clearfix extras").getElementsByClassTagName("span").Items(3).innerText - 第一个getElement... 在字Element 中没有s
  • 你的意思是从远程网页上抓取标签吗?
  • @furas - 遗憾的是它什么也没返回,
  • @Netlog - 我正在从网站上的标签中抓取值。特别是在“跨度”标签中
  • 这只是一个例子,您可以使用更复杂的方法来获取项目。使用xpath(可能是getElementsByXPath)你可以创建更复杂的方法。

标签: html excel vba web-scraping


【解决方案1】:

有多少元素有 clearfix extras 的复合类?作为一般选择器,以下是正确的:.clearfix.extras li:nth-of-type(3) span

如下使用:

Debug.Print appIE.document.querySelector(".clearfix.extras li:nth-of-type(3) span").innerText

但是,如果您的项目不在该复合类的第一个元素中,则 css 选择器将需要扩展以解决该问题

OP 说 3 需要 2 才能处理手头的情况

【讨论】:

  • 检查页面上有多少项首先具有复合类。此外,请确保在动态填充值时提前等待。
  • 感谢您的回复,我将数字 3 更改为 2,因为我的数据位于“Clearfix extras”的第三个实例中。它似乎工作。老实说,我不知道它为什么会起作用,但我想我还有关于查询选择器的工作要做。再次感谢。
【解决方案2】:

如果你想从远程(或本地!)网页中抓取标签内部,只需使用下面的免费 DOM 解析器
PHP Simple HTML DOM Parser
有很好的手册和示例,使用起来非常简单...

【讨论】:

  • 谢谢 Netlog,很遗憾我在一个安全的服务器上工作,我不能访问该链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多