【问题标题】:How to pull attribute details from btnclass webscraping如何从 btn 类网络抓取中提取属性详细信息
【发布时间】:2019-04-19 21:54:27
【问题描述】:

我目前正在尝试从网页上的 BTnClass 元素中提取特定信息。

具体的按钮和前面的元素细节是:

<div class="m-t-sm">

<button class="btnLink " id="viewClientRecord_1-00001"
type="button" data-url="/?mtoken=itg999="><span class="text">View referral summary and client record
<span class="offscreen">&nbsp;for CLIENT NAME</span></span></button>

我正在尝试检索数据

data-url

为了进一步增加复杂性,有 200,000 条客户记录,并且 Btn 类的 ID 对每个客户都是唯一的,所以我不能依赖 ID 来实现这一点(据说我也尝试使用 ID 并失败了。

我尝试了以下选项:

独特的元素

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementById("viewClientRecord_1-00001")(0).Children(0).getAttribute("data-url")(0).innerHTML

顶级 div 类

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("Cardf-row")(0).Children(0).getAttribute("data-url")(0).innerHTML

上一课

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).Children(0).getAttribute("data-url")(0).innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).getAttribute("data-url")(0).innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("m-t-sm")(0).getAttribute("data-url").innerHTML

Sheets("Results").Range("A" & ClientRowNumber).Value = html.getElementsByclassname("btnlink ")(0).getAttribute("data-url").innerHTML

无论我尝试什么,我都无法让 getAttribute("data-url") 获取任何东西:(

编辑。更新为 GetElementsByClassName

【问题讨论】:

  • getElementById 返回单个元素,而不是集合,它是 get​Elements​ByClass​Name,而不是 get​Elements​ByClass
  • 抱歉,我在实际代码中使用了 getelementsbyclassname:getElementsByClassName("cardrow cf")(ClientPageRecord).getElementsByClassName
  • 我认为我们可以改进这一点。您访问了多少页?

标签: excel vba web-scraping excel-2016


【解决方案1】:

虽然我没有检查您的行 html.getElementById("viewClientRecord_1-00001")(0).Children(0),但我认为它是正确的,除了在 .getElementByID() 上非法的索引号。

.getAttribute() 函数不返回集合。如果是这样,它可能会遵循HTMLDocument 的其余命名约定,并附加一个s 使其成为.getAttributes()。这意味着您不能像使用 .getAttribute("data-url")(0) 那样为其附加索引号。

另外,getAttribute() 返回一个字符串。字符串不包含 .innerText 属性。您需要删除.innerText 并从函数getAttribute 返回结果。这将为您带来以下最终结果:

Sheets("Results").Range("A" & ClientRowNumber).Value = _
     html.getElementById("viewClientRecord_1-00001").Children(0).getAttribute("data-url")

【讨论】:

  • K.Davis,你赚钱了,通过删除 innertext innerhtml 等,它立即起作用了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
相关资源
最近更新 更多