PHP парсинг контента с URL - PullRequest
       0

PHP парсинг контента с URL

0 голосов
/ 07 декабря 2018

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

В настоящее время я могу получить статью из 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;

}

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Я использовал эту библиотеку до 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;
0 голосов
/ 08 декабря 2018

Вы должны использовать 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.

0 голосов
/ 07 декабря 2018

Вы действительно должны использовать PHPs 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...