如何选择"孩子"带有getElementsByClassName的HTML类

时间:2014-11-16 21:12:55

标签: html excel vba web-scraping

我对编程完全陌生,最初只是观看了一些YouTube视频,所以请放轻松一下;

为了测试我所知道的并尝试学习新东西,我决定制作一个Excel宏,它可以从本地音乐会场的网站上获取关于即将进行的现场表演的信息。我开始使用方法:getElementsByClassName,并具体确定在IE上面的HTML中出现了多少同名的类:

    Dim Headliner As String
    Headliner = Trim(Doc.getElementsByClassName("headliner summary")(2).innerText)

不幸的是,我发现在某些网页上或多或少的宣传片会碰到我在屏幕上或屏幕上寻找的“头条新闻摘要”类。

幸运的是,“头条新闻摘要”是“event-info”的子类,在整个网站上非常一致。显然我可以将我的代码更改为:

    Dim Headliner As String
    Headliner = Trim(Doc.getElementsByClassName("event-info")(0).innerText)

但是现在我的信息比我想要的更多。有没有办法选择一个类和子类?

我在哪里可以找到描述方法的好参考文件?是否有任何参考文档专门从HTML网站上抓取数据?

谢谢!

1 个答案:

答案 0 :(得分:0)

<H5>不是一个班级。第一个代码示例应为Doc.getElementsByTagName("h5")(2).innerText,以便从文档中的第三个<H5>元素中获取显示文本。

如果这仍然会产生不一致,那么查看第一个H5的{​​{1}}元素可能会返回正确的结果。

<H5 class="event-info">

没有足够的样本数据,但这也可以保持一致。

Dim Headliner As String
Dim e As mshtml.IHTMLElement, ec As mshtml.IHTMLElementCollection
Set ec = Doc.getElementsByTagName("h5")
For Each e In ec
    If e.className = "event-info" Then
        Headliner = Trim(e.innerText)
        Exit For
    End If
Next e
Set e = Nothing: Set ec = Nothing

在后者中,我假设您正在寻找第一个元素中的第一个Headliner = Trim(Doc.getElementsByClassName("event-info")(0).getElementsByTagName("h5")(0).innerText) 元素(<H5>或许......?)。你真的没有提供关于使用 event-info 类的元素类型的足够信息,所以我不知道是否在另一个元素<DIV>中将其视为<H5> {1}}或实际的<DIV class="event-info">