Мне нужна помощь в отношении этого учебного сценария, который я создаю, и я пытаюсь получить статьи с веб-сайта.
В настоящее время я могу получить статью из 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 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
Я использовал эту библиотеку до 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
Он должен работать. Похоже, библиотеки нет на вашей странице. Загрузите его здесь sourceforge.net/projects/simplehtmldom/files/… и включите simple_html_dom.php на свою страницу.
Вы должны использовать 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, который может встречаться внутри содержимого статьи, конвертируются должным образом. Как & становится &, а <b>bold</b> просто становится bold.
Вы проделали потрясающую работу! Теперь я это ясно вижу, в итоге я застрял с первым результатом. Что касается DOMDocument, я пробовал перед использованием ванильного кодирования, но похоже, что они не поддерживают классы, а только идентификаторы и теги элементов