从简单 Html Dom - PHP 中排除不需要的 html
Exclude non wanted html from Simple Html Dom - PHP
我正在使用 HTML 简单 Dom 解析器和 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 中的所有内容,id 为 "product_description"。我想排除 ID 为 "comments" 的 div。我试图将其转换为字符串,然后使用 substr 排除最后一个字符,但那是行不通的。不知道为什么。关于我该怎么做的任何想法?任何允许我从解析的 html 中排除 div 的方法都可以。谢谢
您可以通过设置 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 ;
}
好的 所以我发现自己只是使用 Advanced 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;
我正在使用 HTML 简单 Dom 解析器和 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 中的所有内容,id 为 "product_description"。我想排除 ID 为 "comments" 的 div。我试图将其转换为字符串,然后使用 substr 排除最后一个字符,但那是行不通的。不知道为什么。关于我该怎么做的任何想法?任何允许我从解析的 html 中排除 div 的方法都可以。谢谢
您可以通过设置 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 ;
}
好的 所以我发现自己只是使用 Advanced 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;