我正在试图弄清楚如何解析网站以获取表格中的链接。在我的特定情况下,有两个表,但我只想要第二个表(Link5和Link6)中的链接。这是我试图解析的HTML。
<html>
<head>
</head>
<body>
<a href="http://www.example.com/link1.html">Link1</a><br>
<br>
<table>
<tbody>
<tr>
<td><a href="http://www.example.com/link2.html">Link2</a></td>
<td>dog</td>
<td>fish</td>
</tr>
<tr>
<td><a href="http://www.example.com/link3.html">Link3</a></td>
<td>cat</td>
<td>bird</td>
</tr>
</tbody>
</table>
<br>
<a href="http://www.example.com/link4.html">Link4</a><br>
<br>
<table>
<tbody>
<tr>
<td><a href="http://www.example.com/link5.html">Link5</a></td>
<td>cow</td>
</tr>
<tr>
<td><a href="http://www.example.com/link6.html">Link6</a></td>
<td>horse</td>
</tr>
</tbody>
</table>
<br>
<a href="http://www.example.com/link7.html">Link7</a><br>
</body>
</html>
我已经读过DOM是一种从Web解析数据的好方法,所以这是我一直在研究的代码。
<?php
$link = array();
//new dom object
$dom = new DOMDocument();
//load the html
$html = $dom->loadHTMLFile('http://www.example.com');
//discard white space
$dom->preserveWhiteSpace = false;
//get the table by its tag name
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(1)->getElementsByTagName('tr');
$i = 0;
//loop over the table rows
foreach ($rows as $row)
{
$links = $row->getElementsByTagName('a');
//put node value into an array
$link[] = $links->item(0)->nodeValue;
// echo the values
echo $link[$i] . '<br />';
$i++;
}
?>
此代码提供以下输出: Link5 Link6
但我想要达到的目的是: http://www.example.com/link5.html http://www.example.com/link6.html
非常感谢任何帮助。
答案 0 :(得分:0)
我想问题是你想得到href
而不是节点的值。所以你应该使用getAttribute
答案 1 :(得分:0)
$link[] = $links->item(0)->getAttribute("href");