提取特定 div 的内容,仅保留某些元素
Extract content of specific div preserving only certain elements
我只需要提取网页的文本部分,只保留 <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"]');
获得的输出的有效方式?
如果我没有正确理解你的问题..这是你要的吗...
$output1=preg_match('/^.*<tagName>(.*)<\/tagName>/', $value,$match1);
匹配标记名并使用 preg_match
...
获取它们之间的数据
在这种情况下,您可以在 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);
}
}
我只需要提取网页的文本部分,只保留 <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"]');
获得的输出的有效方式?
如果我没有正确理解你的问题..这是你要的吗...
$output1=preg_match('/^.*<tagName>(.*)<\/tagName>/', $value,$match1);
匹配标记名并使用 preg_match
...
在这种情况下,您可以在 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);
}
}