我正在使用Simple HTML DOM从HTML文档中提取数据,我还有一些问题需要帮助。
在以if ($td->find('a'))
开头的行上,我想分别提取href和锚节点的内容,并将它们放在单独的变量中。但是代码不起作用(参见下面代码中的回声输出)。
最好的方法是什么?请注意,我的目的是稍后从信息中创建XML文档,因此我需要以正确的顺序提供信息。
链接指向包含有关不同车辆的详细信息的页面(例如“最大速度”,“价格”等),我也想提取并放入单独的变量中。如何在这些页面上获取数据?
<?php
include 'simple_html_dom.php';
$html = new simple_html_dom();
$html = file_get_html('http://www.example.com/foo.html');
$items = array();
foreach ($html->find('table') as $table) {
foreach ($table->find('tr') as $tr) {
foreach ($tr->find('td') as $td) {
if ($td->find('a')) {
$link = $td->find('a.href');
echo $link; // empty
$text = $td->find('a.text');
echo $text; // Array
}
else {
echo 'Name: ' . $td;
}
}
}
}
HTML文档如下所示:
<div>
<table>
<tr>
<td>
<a href="car1.html" target="_blank">Car 1</a>
</td>
<td>
Porsche
</td>
</tr>
<tr>
<td>
<a href="car2.html" target="_blank">Car 2</a>
</td>
<td>
Chrysler
</td>
</tr>
... and so on...
答案 0 :(得分:3)
使用$td->find('a', 0)->href
和$td->find('a', 0)->innertext
访问第一种情况下的元素属性,使用第二种情况中的内容。此外,如果可能找到多个锚点,请使用0作为安全防护来始终获得第一个。
答案 1 :(得分:2)
'a.href'
是查找CSS类href
的锚标记的选择器。不要获取锚标记的href属性。你可以这样做:
$link = $td->find('a', 0);
$href = $link->href;