你不能用strip_tags()
實現這一目標,因爲它甫一刪除標籤。你不想用例如一個空白字符(新行,空格,..)。 你應該用一個正則表達式來調用它,它只是替換所有的標籤。
更好的方法將解析提取的頁面DOMDocument,以便您可以直接從HTML結構派生結構。 DOM文檔
的使用
示例您有下面的示例中的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
在內存方面會變得非常昂貴。
您能否提供您從url中檢索的原始數據的副本?這將有助於確定如何處理數據。 – 2012-02-22 10:17:05