我正在使用Symfony的DomCrawler组件。我已成功检索节点,添加和修改HTML。
但是,我不确定如何在最后实际获取HTML。我试图在DomCrawler更改之后获取HTML字符串,但我无法知道如何操作。
没有魔法__toString()
方法(当我执行print $crawler
时它会返回错误)。没有get*()
方法,没有将html作为值的属性。我试过vardump($crawler)
,但这没有帮助。
更新
如果我使用
$crawler->first()->ownerDocument->saveHtml()
它抛出一个关于“在非对象上调用saveHtml()”的异常,加上PHP错误:
未定义的属性:Symfony \ Component \ DomCrawler \ Crawler :: $ ownerDocument
我尝试使用eq(0)而不是first(),但得到了同样的错误。
但是,如果我改用
each( function($node, $i) {
print $i . " - " . $node; }
)
然后它返回
0 - <html>...</html>
答案 0 :(得分:6)
Crawler::html()
方法。
Crawler是DOMElement个对象的集合(SplObjectStorage)。知道您可以使用DOMElement,DOMNode以及DOMDocument中提供的任何方法和属性:
$html = '';
foreach ($crawler as $domElement) {
$html.= $domElement->ownerDocument->saveHTML();
}
echo $html;
有用的链接:
答案 1 :(得分:3)
由于这在搜索时很早就出现了,我只想指出在Symfony 2.3中将方法html()
添加到爬虫中
请参阅Symfony文档中的“Manipulating and Dumping a Crawler”。