使用 DOMXpath 查找不太好的数据 html

Using DOMXpath to find data in not so nice html

我正在尝试从植物列表网站获取一些数据。这证明有点问题,因为它们的 html 格式不正确。这是搜索结果中的两行(免责声明:我不对此代码负责):

 <tr>
    <td>
        <i class="glyphicons-icon leaf"></i>
    </td>
    <td>
        <a title="Cimicifuga simplex" href="/taxon/wfo-0000604773" class="result">
            <h4 class="h4Results"><em>Cimicifuga simplex</em>(DC.) Wormsk. ex Turcz.</h4>
        </a>    
        Bull. Soc. Imp. Naturalistes Moscou<br/>
        <div>
            <em>Status:</em><span id="entryStatus">Synonym of&#160;</span>
            <a href="/taxon/wfo-0000519124"><em>Actaea simplex</em>(DC.) Wormsk. ex Prantl</a>
        </div>
        <div>
            <em>Rank:</em><span id="entryRank">Species</span>
        </div>
        <div>
            <em>Family:</em> Ranunculaceae
        </div>
    </td>
    <td>
        <img title="No Image Available" src="/css/images/no_image.jpg" class="thumbnail pull-right"/>
    </td>
</tr>
<tr>
    <td>
        <i class="glyphicons-icon leaf"></i>
    </td>
    <td>
        <a title="Actaea simplex" href="/taxon/wfo-0000519124" class="result">
            <h4 class="h4Results"><strong><em>Actaea simplex</em>(DC.) Wormsk. ex Prantl</strong></h4>
        </a>
        Bot. Jahrb. Syst.<br/>
        <div>
            <em>Status:</em><span id="entryStatus">Accepted Name</span>
        </div>
        <div>
            <em>Rank:</em><span id="entryRank">Species</span>
        </div>
        <div>
            <em>Family:</em> Ranunculaceae</div>
        <div>
            <em>Order:</em> Ranunculales
        </div>
    </td>
    <td>
        <img title="No Image Available" src="/css/images/no_image.jpg" class="thumbnail pull-right"/>
    </td>
</tr>

我自己加了一些布局,不然看不懂。

无论如何,我在 php 和 DOMXpath 中加载了页面,现在我想得到两件事:

在这种情况下,结果将是“Actaea simplex”和“/taxon/wfo-0000519124”。请注意,会有更多类似第一行的结果,而且我要查找的行的位置不一定是第二行。

通常我只是尝试,使用 google 并尝试更多,最后我到达那里,但在这种情况下,ID 被用作 类,并且不是唯一的。这使得无法使用 Xpath 测试器,甚至可能对 DOMXpath 毫无用处。

那么,是否可以使用 DOMXpath 获取我的数据,如果可以,我应该使用什么查询?

试试这样的东西:

$dom = new DOMDocument();
$dom->loadXML($xml);
$xpath = new DOMXPath($dom);

$target = $xpath->query("//td[.//span[.='Accepted Name']]/a");
$link = $target[0]->getAttribute('href');
$title = $target[0]->getAttribute('title');
echo $title," ",$link;

输出

Actaea simplex /taxon/wfo-0000519124