如何从网站获取特定的 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']";
实际上,该元素似乎同时具有 id 和 class 属性且值为 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 元素的屏幕截图:
我正在尝试从网站获取特定的 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']";
实际上,该元素似乎同时具有 id 和 class 属性且值为 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 元素的屏幕截图: