2017-07-24 53 views
0

我想从一个网站获取特定的div元素(即属性id="vung_doc"),但我几乎获得了每个元素。你有什么想法吗?如何从网站获取特定的div?

$doc = new DOMDocument; 

// We don't want to bother with white spaces 
$doc->preserveWhiteSpace = true; 

// Most HTML Developers are chimps and produce invalid markup... 
$doc->strictErrorChecking = false; 
$doc->recover = true; 

$doc->loadHTMLFile('http://lightnovelgate.com/chapter/epoch_of_twilight/chapter_300'); 

$xpath = new DOMXPath($doc); 

$query = "//*[@class='vung_doc']"; 


$entries = $xpath->query($query); 
var_dump($entries->item(0)->textContent); 

回答

0

实际上,似乎是一个元件,它具有两个ID属性具有值vung_doc,具有其文字内容中有很多段落。也许你认为每个段落都应该在它自己的div元素中。

<div id="vung_doc" class="vung_doc" style="font-size: 18px;"> 
    <p></p> 
    "Mayor song..." 

在本文底部的截图中,我向该元素添加了一个大纲样式,以显示该元素中有多少段落。

如果你想的段落分开,你可以使用preg_split()拆就任何新行字符:

$entries = $xpath->query($query); 

foreach($entries as $entry) { 
    $paragraphs = preg_split("/[\r\n]+/s",$entry->textContent); 
    foreach($paragraphs as $paragraph) { 
     if (trim($paragraph)) {    
      echo '<b>paragraph:</b> '.$paragraph; 
      break; 
     } 
    } 
} 

请参阅本in this playground example的演示。需要注意的是加载HTML文件之前,libxml_use_internal_errors()被调用,以抑制XML错误:添加

libxml_use_internal_errors(true); 

截图与大纲目标DIV元素:

screenshot

+0

非常感谢您! – sh33pS0ldat

0

变化

$query = "//*[@class='vung_doc']"; 

$query = "//*[@id='vung_doc']"; 
相关问题