Intereting Posts
Как сделать успешную регистрацию, скопировать содержимое одного столбца таблицы в другое? CodeIgniter 2.0 – проверка массивов PHP-загрузка файлов Подключение к базе данных MySQL MySQL из локального хоста Проверьте, заблокирован ли файл с помощью flock ()? автономная грамматика и парсер для php Как установить инструмент Zend Framework 2 с композитором Поле запроса корневого объекта в доктрине (объединенное) наследование таблицы классов Проблема с кодировкой символов в электронной почте, отправленной через PHP? PHPStorm: Открыть в опции «Браузер»: как установить сервер по умолчанию для открытия? php не соответствует ios lon и lat с mysql lon и lat правильно PHP / PDO / MySQL: преобразование нескольких запросов в единый запрос Сканировать текущую папку с помощью PHP У вставки codeigniter вставки_statch () с тысячами вставок нет пропущенных записей Переадресация цикла по запросу $ _GET

Как читать веб-страницу в PHP

Я пытаюсь сохранить некоторые веб-страницы в текстовые файлы, используя PHP-скрипты.

Как загрузить веб-страницу в файловый буфер с помощью PHP и удалить теги HTML?

  • Простым способом: fopen() или file_get_contents() URL: fopen("http://google.com/", "r")
  • Умный способ: использовать библиотеку cURL
  • Другой умный способ: http_get() из http модуля PHP
  • fsockopen() путь: fsockopen() HTTP-запрос и отправьте его с помощью fsockopen() или stream_socket_client()
  • Способ C: отправьте HTTP-запрос с использованием сокетов
  • Глупый способ: вызвать внешний инструмент, такой как 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 (если вам нужно зайти в систему и т. Д.),