使用Symfony爬网程序选择HTML块


Using Symfony Crawler to select HTML block

我使用DOMCrawler基于CSS选择器来选择HTML,就像这样;

$selector = '#content';
$html = $my_fetched_html;
$crawler = new Crawler($html);
$crawler = $crawler->filter($selector);

这一切都很好,如果我遍历$crawler元素,它会确认选择器工作正常,即,我只得到一个div,而不是完整的html。

但是,当谈到保存HTML时,我遇到了问题,因为做这样的事情;

$html = '';
foreach ($crawler as $domElement) {
  $html.= $domElement->ownerDocument->saveHTML();
}
echo $html;

(如本问题所示)

我再次得到了完整的结构,我假设它是因为$ownerDocument仍然是原始的(未选中的)$crawler文档。

所以,我需要的是能够实例化一个新的DomDocument(也许?),将我的Element添加到其中,然后从那里保存HTML()。我想?

伪代码;

$doc = new DomDocument
foreach ($crawler as $domElement) {
  $doc->addChild($domElement);
}
$new_html = $doc->saveHTML();

我很想得到任何帮助,它开始让我头疼了。

您需要传递要保存html()的html的子级。即这样做:

$html.= $domElement->ownerDocument->saveHTML($domElement);