#php #dom #screen-scraping
#php #dom #очистка экрана
Вопрос:
Я пытаюсь создать скрипт, который очищает веб-сайт для получения последних обновлений новостей. К сожалению, я столкнулся с небольшой проблемой, которую, похоже, не могу исправить с моими ограниченными знаниями о DOM.
Страница, которую я пытаюсь очистить, построена следующим образом :
<table> <tr class="color1"> <td>Author</td> <td>Content <a href="#">in HTML</a></td> <td>Date</td> </tr> </table>
Я могу отлично извлекать нужные мне поля, за исключением содержимого. С помощью $td-> nodeValue я извлекаю содержимое в текстовой форме, тогда как я хочу, чтобы оно было в HTML (там есть теги ‘a’, ‘blockquote’ и т.д.)
Вот код, который у меня есть :
try {
$html = @ file_get_contents("test.php");
checkIfFileExists($html);
$dom = new DOMDocument();
@ $dom->loadHTML($html);
$trNodes = $dom->getElementsByTagName("tr");
foreach ($trNodes as $tr) {
if ($tr->getAttribute("class") == "color1" || $tr->getAttribute("class") == "color2") {
$tdNodes = $tr->childNodes;
foreach ($tdNodes as $td) {
echo $td->nodeValue . "<br />n";
}
echo "<br /><br /><br /><br /><br />n";
}
} catch(Exception $e) {
echo $e->getMessage();
}
Я бы предпочел не прибегать к какой-либо сторонней библиотеке, но, очевидно, любой ответ наиболее ценен, библиотека это или нет.
Заранее спасибо.
Ответ №1:
заменить
echo $td->nodeValue . "<br />n";
с помощью
echo $dom->saveXML($td) . "<br />n";