提取特定div的内容仅保留某些元素

时间:2015-02-18 10:29:52

标签: php dom domdocument domxpath

我只需要提取保留所有网页的文字部分,而只提取<p> <h2>, <h3>, <h4> and <blockquote>s

现在,使用DOMXPath和$div = $xpath->query('//div[@class="story-inner"]');在文本div中提供了许多不需要的页面元素,如图片,广告块,其他自定义标记等。

另一方面,使用以下代码:

$items = $doc->getElementsByTagName('<p>');
 for ($i = 0; $i < $items->length; $i++) {
    echo $items->item($i)->nodeValue . "<p>";
}

给出非常好的和干净的结果非常接近我想要的,但<h2>, <h3>, <h4> and <blockquotes>丢失了。

我想知道是否有任何DOM方式(1)只显示所需的页面元素并提取干净的结果;或(2)有效的方法来清理使用$div = $xpath->query('//div[@class="story-inner"]');获得的输出?

2 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题..这就是你要求的......

$output1=preg_match('/^.*<tagName>(.*)<\/tagName>/', $value,$match1);

使用preg_match ...

与标记名匹配并在其中获取数据

答案 1 :(得分:0)

在这种情况下,您可以在xpath查询中使用OR。只需将这些标签与其级联,即可得到那些唯一需要的标签。

$url = "http://www.example.com/russian/international/2015/02/150218_ukraine_debaltseve_fighting";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$html = curl_exec($curl);
curl_close($curl);

$doc = new DOMDocument();
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
@$doc->loadHTML($html);

$xpath = new DOMXPath($doc);

$tags = array('p', 'h2');
$children_needed = implode(' or ', array_map(function($tag){ return sprintf('name()="%s"', $tag); }, $tags));
$query = "//div[@class='story-body__inner']//*[$children_needed]";
$div_children = $xpath->query($query);
if($div_children->length > 0) {
    foreach($div_children as $child) {
        echo $doc->saveHTML($child);
    }
}