我只需要提取保留所有网页的文字部分,而只提取<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"]');
获得的输出?
答案 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);
}
}