PHP Parse содержимого с URL-адреса

Мне нужна помощь в отношении этого учебного сценария, который я создаю, и я пытаюсь получить статьи с веб-сайта.

В настоящее время я могу получить статью из 1 элемента, но не могу получить все элементы, это пример URL-адреса, который я пытаюсь получить.

<div class = "entry-content">
</div>

<div class = "entry-content">
</div>

<div class = "entry-content">
</div>

Это мой PHP-код для получения содержимого первого div:

function getArticle($url){

    $content = file_get_contents($url);
    $first_step = explode( '<div class = "entry-content">' , $content );
    $separate_news = explode("</div>" , $first_step[1] );
    $article = $separate_news[0];

    echo $article;

}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 756
3

Ответы 3

Вам действительно стоит использовать класс PHP DOMDocument для синтаксического анализа HTML. Что касается вашего примера кода, проблема в том, что вы не обрабатываете все результаты из вашего массива $first_step. Вы можете попробовать что-то вроде этого:

$first_steps = explode( '<div class = "entry-content">' , $content );
foreach ($first_steps as $first_step) {
    if (strpos($first_step, '</div>') === false) continue;
    $separate_news = explode("</div>" , $first_step );
    $article = $separate_news[0];
    echo $article;
}

Вот маленький демо на 3v4l.org

Вы проделали потрясающую работу! Теперь я это ясно вижу, в итоге я застрял с первым результатом. Что касается DOMDocument, я пробовал перед использованием ванильного кодирования, но похоже, что они не поддерживают классы, а только идентификаторы и теги элементов

Goncalo 07.12.2018 22:00

Я использовал эту библиотеку до http://simplehtmldom.sourceforge.net/. Полная документация находится здесь http://simplehtmldom.sourceforge.net/manual.htm. Он очень прост в использовании и делает гораздо больше. Вы можете выбрать такие статьи, как:

$html = file_get_html($url);
$articles = $html->find(".entry-content");
foreach($articles as $article) echo $article->plaintext;

Он не работает с последней версией библиотеки вашего кода: [07-Dec-2018 16:10:07 America / New_York] Неустранимая ошибка PHP: вызов неопределенной функции file_get_html () в /home/gmtemhic/public_html/index.php в строке 19

Goncalo 07.12.2018 22:10

Он должен работать. Похоже, библиотеки нет на вашей странице. Загрузите его здесь sourceforge.net/projects/simplehtmldom/files/… и включите simple_html_dom.php на свою страницу.

Kubwimana Adrien 07.12.2018 22:30

Вы должны использовать DOMDocument. Хотя выбрать узлы по классу CSS немного сложно, вы можете сделать это с помощью DomXPath следующим образом:

$dom = new DomDocument();
$dom->load($url);
$xpath = new DomXPath($dom);
$classname = "entry-content";
$nodes = $xpath->query('//*[contains(concat(" ", normalize-space(@class), " "), " entry-content ")]');
foreach($nodes as $node) {
    echo $node->textContent . "\n";
}

Преимущество теперь также в том, что объекты HTML и другой HTML, который может встречаться внутри содержимого статьи, конвертируются должным образом. Как &amp; становится &, а <b>bold</b> просто становится bold.

Другие вопросы по теме