您无法使用 实现此目的strip_tags()
,因为它只是删除了标签。您不想用例如空白字符(换行符、空格、..)替换它们。您可能应该使用正则表达式调用来执行此操作,它只是替换所有标签。
更好的方法是使用DOMDocument解析获取的页面,以便您可以直接从 HTML 结构派生结构。
DOMDocument 的使用示例
您有以下示例 html 页面:
<!DOCTYPE html>
<html>
<head>
<title>This is my title</title>
</head>
<body>
<table id="someDataHere">
<tr>
<th>Country</th>
<th>Population</th>
</tr>
<tr>
<td>Germany</td>
<td>81,779,600</td>
</tr>
<tr>
<td>Belgium</td>
<td>11,007,020</td>
</tr>
<tr>
<td>Netherlands</td>
<td>16,847,007</td>
</tr>
</table>
</body>
</html>
您可以使用DOMDocument
来获取表中的条目:
$url = "...";
$dom = new DOMDocument("1.0", "UTF-8");
$dom->loadHTML(file_get_contents($url));
$preparedData = array();
$table = $dom->getElementById("someDataHere");
$tableRows = $table->getElementsByTagName('tr');
foreach ($tableRows as $tableRow)
{
$columns = $tableRow->getElementsByTagName('td');
// skip the header row of the table - it has no <td>, just <th>
if (0 == $columns->length)
{
continue;
}
$preparedData[ $columns->item(0)->nodeValue ] = $columns->item(1)->nodeValue;
}
$preparedData
现在将保存以下数据:
Array
(
[Germany] => 81,779,600
[Belgium] => 11,007,020
[Netherlands] => 16,847,007
)
一些笔记
- 由于您正在开发爬虫(蜘蛛),因此您高度依赖目标网页的 HTML 结构。每当他们更改模板中的某些内容时,您可能必须调整您的爬虫。
- 这只是一个简单的示例,但它应该清楚说明您现在如何使用它来产生更高级的结果。
- 由于
DOMDocument
实现了 DOM 方法,因此您必须使用它们提供的可能性来处理 HTML 结构。
- 对于非常大的 HTML 页面
DOMDocument
,在内存方面可能会变得非常昂贵。