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

15
задан Martin Thoma 15 May 2014 в 10:14
поделиться

4 ответа

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

Ни один из них не гарантирует быть доступным на вашем сервере.

64
ответ дан 30 November 2019 в 23:52
поделиться

Как уже говорилось в других ответах, либо стандартные функции потока 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 '';
}

Возможно, вам понадобится что-то более сложное, например, который заменяет теги
(где $ node-> name == 'br' ) на новые строки, но для начала подойдет.

Затем загрузите текст HTML в объект Tidy и вызовите свою функцию в основном узле. Если у вас есть содержимое в строке, используйте:

$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());

Вариант № 2 : используйте регулярные выражения для удаления всего между < и > . Вы могли (и, вероятно, должны) разработать более сложное регулярное выражение, которое, например, соответствовало бы только действительным начальным или конечным тегам HTML. Любые ошибки в синтаксисе страницы, такие как случайная угловая скобка в основном тексте, могут означать вывод мусора, если вы не будете осторожны. Вот почему Tidy так хорош (он специально разработан для очистки плохих страниц), но может быть недоступен.

2
ответ дан 30 November 2019 в 23:52
поделиться

В одну сторону:

$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);

Приведенный выше код является просто примером и не имеет (!) проверка и обработка ошибок.

6
ответ дан 30 November 2019 в 23:52
поделиться

Я настоятельно рекомендую вам воспользоваться посмотрите на класс SimpleHTML DOM;

SimpleHTML DOM Parser на SourceForge

С его помощью вы можете искать в дереве DOM, используя селекторы css, как с функцией $ () jQuery или функцией prototypeJS $$ ().

Хотя он работает с file_get_contents () для получения содержимого веб-страницы, вы можете передать ему HTML только с каким-то своим классом cURL (если вам нужно войти в систему и т. Д.)

0
ответ дан 30 November 2019 в 23:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: