假设我有一个HTML页面如下:
<!-- This is the opening tag -->
<div class="content_text">
<div>Title</div>
<div>Author Name</div>
<div>Some complicated HTML elements correctly validated</div>
<b>Some more text</b>
<img ... />
<div> more and more text </div>
</div><!-- This is the correct closing tag -->
如何获取带有class="content_text"
的div的开头和正确的结束标记之间的内容?
我尝试了正则表达式,但我找不到任何简单甚至难以实现的方法。
我试过XPath,但我仍然无法获得内容。相反,我在外部div中得到了文本。
答案 0 :(得分:5)
您可以使用PHP Simple HTML DOM Parser来解析HTML,就像DOMDocument
那样。
答案 1 :(得分:4)
$scrape_address = "http://www.al-madina.com/node/444862";
$ch = curl_init($scrape_address);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, '1');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, "");
$data = curl_exec($ch);
// I couldn't get an element by Attribute so I just replaced class to id
$data = str_replace('class="content_text"','id="my_unique_id"',$data);
$domd = new DOMDocument();
libxml_use_internal_errors(true);
$domd->loadHTML($data);
libxml_use_internal_errors(false);
$div = $domd->getElementById("my_unique_id");
if ($div) {
$dom2 = new DOMDocument();
$dom2->appendChild($dom2->importNode($div, true));
echo $dom2->saveHTML();
} else {
echo "Nothing found";
}
答案 2 :(得分:2)
我建议使用PHP的DOMDocument - 除非内容总是以完全相同的方式构建,正则表达式不会这样做,即便如此,它也不会很漂亮。
此外,这是使用SimpleXML解决的question about a similar situation,也许可以提供帮助。
答案 3 :(得分:0)
您似乎已经能够成功运行XPath查询,所以我省略了PHP代码并直接进入XPath部分。
不确定“内容”是什么意思,所以我提供了一些替代方案:
您想要<div/>
中的所有文本节点:
//div[@class="content_text"]//text()
您希望所有XML包括元素:
//div[@class="content_text"]
两者都会返回一组结果,请务必循环。