如何解决使用 DOMXpath 在不太好的 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 </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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。