Исключить ненужные html из Simple Html Dom - PHP - PullRequest
0 голосов
/ 03 апреля 2020

Я использую HTML Simple Dom Parser с PHP, чтобы получить заголовок, описание и изображения с веб-сайта. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю html, который мне не нужен, и как исключить эти html теги. Ниже приведено объяснение.

Вот пример html структуры, которая анализируется.

<div id="product_description">
<p> Some text</p>
<ul>
<li>value 1</li>
<li>value 2</li>
<li>value 3</li>
</ul>

// the div I dont want
<div id="comments">
<h1> Some Text </h1>
</div>

</div>

Я использую ниже php скрипт для анализа,

foreach($html->find('div#product_description') as $description)
{
    echo $description->outertext ;
    echo "<br>";
}

Приведенный выше код анализирует все внутри div с идентификатором "product_description". Что я хочу, чтобы исключить div с идентификатором "комментарии". Я попытался преобразовать это в строку, а затем использовал substr, чтобы исключить последний символ, но это не работает. Не знаю почему. Есть идеи о том, как я могу это сделать? Любой подход, который позволит мне исключить div из проанализированного html, будет работать. Спасибо

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Вы можете удалить ненужные элементы, установив их outertext = '':

$src =<<<src
<div id="product_description">
    <p> Some text</p>
    <ul>
        <li>value 1</li>
        <li>value 2</li>
        <li>value 3</li>
    </ul>

    <!-- the div I don't want -->                                                                                                                                        
    <div id="comments">
        <h1> Some Text </h1>
    </div>

</div>
src;

$html = str_get_html($src);

foreach($html->find('#product_description') as $description)
{
    $comments = $description->find('#comments', 0); 
    $comments->outertext = ''; 
    print $description->outertext ;
}
0 голосов
/ 04 апреля 2020

Хорошо. Итак, я решил, что просто использую расширенную Html библиотеку Dom, она полностью совместима с простым html dom, и с ее помощью вы получите гораздо больший контроль. Очень просто удалить то, что вы хотите от разбора html. Например,

//to remove script tag
$scripts = $description->find('script')->remove;

//to remove css style tag
$style = $description->find('style')->remove;

// to remove a div with class name findify-element
$findify = $description->find('div.findify-element')->remove;

введите описание ссылки здесь

...