我知道如何通过cUrl获取html源代码,但我想删除html文档上的注释(我的意思是<!-- .. -->
之间的内容)。另外,如果我只能获取html文档的BODY
。谢谢。
答案 0 :(得分:26)
尝试PHP DOM*:
$html = '<html><body><!--a comment--><div>some content</div></body></html>'; // put your cURL result here
$dom = new DOMDocument;
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//comment()') as $comment) {
$comment->parentNode->removeChild($comment);
}
$body = $xpath->query('//body')->item(0);
$newHtml = $body instanceof DOMNode ? $dom->saveXml($body) : 'something failed';
var_dump($newHtml);
<强>输出强>:
string(36) "<body><div>some content</div></body>"
答案 1 :(得分:1)
答案 2 :(得分:0)
我会将它用于sed以获取正则表达式,例如
curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\->//g" | sed "s/.?(<body>.?</body>).?/\1/"
正则表达式可能不准确,但你明白了......
答案 3 :(得分:0)
正则表达式为我解决了以下问题:
@InboudChannelAdapter
答案 4 :(得分:0)
我遇到了在foreach循环中修改DOMNodeList的问题,但我iterated backwards through the list消失了。因此,我不会建议像接受的答案中那样foreach
循环。而是像这样使用for
循环:
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
for ($els = $xpath->query('//comment()'), $i = $els->length - 1; $i >= 0; $i--) {
$els->item($i)->parentNode->removeChild($els->item($i));
}