Я пытаюсь сохранить некоторые веб-страницы в текстовые файлы, используя PHP-скрипты.
Как загрузить веб-страницу в файловый буфер с помощью PHP и удалить теги HTML?
fopen()
или file_get_contents()
URL: fopen("http://google.com/", "r")
http_get()
из http
модуля PHP fsockopen()
путь: fsockopen()
HTTP-запрос и отправьте его с помощью fsockopen()
или stream_socket_client()
wget
или curl
through system()
Однако ни один из них не будет доступен на вашем сервере.
В одну сторону:
$url = "http://www.brothersoft.com/publisher/xtracomponents.html"; $page = file_get_contents($url); $outfile = "xtracomponents.html"; file_put_contents($outfile, $page);
Вышеприведенный код является лишь примером и не имеет (!) Проверки ошибок и обработки.
Как и другие ответы, либо стандартные функции потока 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 и вызовите свою функцию на узле body. Если у вас есть содержимое в строке, используйте:
$tidy = new tidy(); $tidy->parseString($contents); $text = textFromHtml($tidy->body());
Вариант №2 : используйте регулярные выражения для разделения всего между <
и >
. Вы могли бы (и, вероятно, должны) разработать более сложное регулярное выражение, которое, например, соответствовало бы только действительным стартовым или конечным тегам HTML. Любые ошибки в синаксисе страницы, такие как скользящая угловая скобка в основном тексте, могут означать вывод мусора, если вы не будете осторожны. Вот почему Tidy настолько хорош (он специально разработан для очистки плохих страниц), но он может быть недоступен.
Я настоятельно рекомендую вам взглянуть на класс SimpleHTML DOM;
SimpleHTML DOM Parser в SourceForge
С его помощью вы можете искать дерево DOM с помощью селекторов css, например, с помощью функции $ () jQuery или функции prototypeJS $$ ().
Хотя он работает с файлом_get_contents () для получения содержимого веб-страницы, вы можете передать его HTML только с некоторым классом cURL (если вам нужно зайти в систему и т. Д.),