Как читать веб-страницу в PHP
Я пытаюсь сохранить некоторые веб-страницы в текстовых файлах, используя PHP-скрипты.
Как загрузить веб-страницу в буфер с PHP и удалить теги HTML?
Ответы
Ответ 1
Ни один из них не будет доступен на вашем сервере.
Ответ 2
Один из способов:
$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);
Вышеприведенный код является просто примером и не имеет (!) проверки ошибок и обработки.
Ответ 3
Как говорили другие ответы, либо стандартные функции потока PHP, либо cURL - ваш лучший выбор для извлечения HTML. Что касается удаления тегов, вот пара подходит:
Вариант № 1. Используйте расширение Tidy, если оно доступно на вашем сервере, для рекурсивного просмотра дерева документов и возврата текста из узлов. Что-то вроде этого:
function textFromHtml(TidyNode $node) {
if ($node->isText()) {
return $node->value;
} else if ($node->hasChildren()) {
$childText = '';
foreach ($node->child as $child)
$childText .= textFromHtml($child);
return $childText;
}
return '';
}
Вам может понадобиться нечто более сложное, например, заменяющее теги <br />
(где $node->name == 'br'
) символами новой строки, но это будет сделано для начала.
Затем загрузите текст HTML в объект Tidy и вызовите свою функцию на теле node. Если у вас есть содержимое в строке, используйте:
$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());
Вариант № 2. Используйте регулярные выражения для разделения всего между <
и >
. Вы могли бы (и, вероятно, должны) разработать более сложное регулярное выражение, которое, например, соответствовало бы только действительным стартовым или конечным тегам HTML. Любые ошибки в синаксисе страницы, такие как скользящая угловая скобка в основном тексте, могут означать вывод мусора, если вы не будете осторожны. Вот почему Tidy настолько хорош (он специально разработан для очистки плохих страниц), но он может быть недоступен.
Ответ 4
Я настоятельно рекомендую вам взглянуть на класс SimpleHTML DOM;
SimpleHTML DOM Parser в SourceForge
С его помощью вы можете искать дерево DOM с помощью селекторов css, например, с помощью функции jQuery $() или prototypeJS $$().
Хотя он работает с файлом_get_contents() для получения содержимого веб-страницы, вы можете передать его HTML только с некоторым классом cURL (если вам нужно зайти в систему и т.д.)