使用XPATH隔离嵌套的兄弟标记

时间:2014-06-10 23:41:32

标签: html xml xpath web-scraping screen-scraping

我试图从以下html中检索"prace.avizo.cz""onlineprodej.cz"。我尝试了几种不同的变体来隔离那个网址但没有一个成功。

我试图通过googledoc中的importXML函数获取它。我尝试过的一些途径是:

=importXML(B2,"//article[@class='genericlist component leadingReferers']//ul/li[1]")

=importXML(B2,"//ul[@class='sites items']//li[1]")

=importXML(B2,"//li[@class='item']//div//a")

这些要么不工作,要么返回额外的无关数据。我只是在查找此特定文章 class genericlist component leadingReferers)中的数据。

感谢任何帮助。

<article class="genericlist component leadingReferers">

<h2 class="title">
    Top Publishers
    <i class="tooltip sprite icon_tip_idle" title="&amp;lt;h1&amp;gt;Leading paid referring sites&amp;lt;/h1&amp;gt;Leading publishers referring advertising traffic to Cz.indeed.com"></i>
</h2>
<ul class="sites items">
        <li class="item ">
                <div class="text" title="prace.avizo.cz" data-sitename="prace.avizo.cz">
                    <a class="link" href="/website/prace.avizo.cz" data-tipsygravity="w" data-shorturl="Prace.avizo.cz">
                            <img class="icon lazy-icon lazy"  data-original="http://images2.similargroup.com/image?url=prace.avizo.cz&amp;t=2&amp;s=1&amp;h=11351681863127555753" src="/images/lazy.png"/>
                            <noscript>
                                <img class="icon" src="http://images2.similargroup.com/image?url=prace.avizo.cz&amp;t=2&amp;s=1&amp;h=11351681863127555753"/>
                            </noscript>

                        Prace.avizo.cz
                    </a>
                </div>
                <div class="progress-bar">
                    <div class="progress-value percentage per1" style="width: 62.91%"></div>
                </div>

        </li>
        <li class="item ">
                <div class="text" title="onlineprodej.cz" data-sitename="onlineprodej.cz">
                    <a class="link" href="/website/onlineprodej.cz" data-tipsygravity="w" data-shorturl="Onlineprodej.cz">
                            <img class="icon lazy-icon lazy"  data-original="http://images2.similargroup.com/image?url=onlineprodej.cz&amp;t=2&amp;s=1&amp;h=14252445317786093368" src="/images/lazy.png"/>
                            <noscript>
                                <img class="icon" src="http://images2.similargroup.com/image?url=onlineprodej.cz&amp;t=2&amp;s=1&amp;h=14252445317786093368"/>
                            </noscript>

                        Onlineprodej.cz
                    </a>
                </div>
                <div class="progress-bar">
                    <div class="progress-value percentage per1" style="width: 50.88%"></div>
                </div>
        </li>
....

1 个答案:

答案 0 :(得分:1)

此表达式将为您提供文章中第一个项目的<a>内的最后一个文本节点

//article[@class='genericlist component leadingReferers']//li[1]//a/text()[last()]

包含文本Prace.avizo.cz的文本(由空格,制表符和换行符包围)。如果您希望修剪这些额外的空格,您可以将该表达式作为参数传递给XPath函数normalize-space()

normalize-space( //article[@class='genericlist component leadingReferers']//li[1]//a/text()[last()] )

您可以以类似的方式选择第二篇文章(使用li[2]表达相同的表达式):

//article[@class='genericlist component leadingReferers']//li[2]//a/text()[last()]

如果要检索包含所有文本节点的集合(可以在XPath之外进行操作),可以使用:

//article[@class='genericlist component leadingReferers']//li//a/text()[last()]

将返回包含所有文本节点的列表(在您的示例中为两个)。在这种情况下,您将不得不使用您的宿主语言来提取它们(可能在for-each循环中)。