如何从网站获取特定的 div?

How can I get a specific div from website?

我正在尝试从网站获取特定的 div 元素(即具有属性 id="vung_doc"),但我几乎获取了所有元素。你知道哪里出了问题吗?

$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);

改变

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

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

实际上,该元素似乎同时具有 idclass 属性且值为 vung_doc,其文本内容中有许多段落。也许您认为每个段落都应该在其自己的 div 元素中。

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

在此 post 底部的屏幕截图中,我为该元素添加了轮廓样式,以显示该元素中有多少段落。

如果你想分隔段落,你可以使用 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. Note that before loading the HTML file, libxml_use_internal_errors() 调用的演示,以抑制 XML 错误:

libxml_use_internal_errors(true);

添加了轮廓的目标 div 元素的屏幕截图: