Php Symfony Dom爬虫缺少节点,行为不一致

Php Symfony Dom爬虫缺少节点,行为不一致,php,symfony,css-selectors,components,domcrawler,Php,Symfony,Css Selectors,Components,Domcrawler,使用此代码: 使用Symfony\Component\domclawler\Crawler; 需要一次(uuu DIR_uuu.'/../vendor/autoload.php'); $html=html(); $children=$crawlerFiltered->eq($i)->children(); 如果(计算(儿童)){ 对于($j=0;$jeq($j)->html(); } } } 回显“父节点:”。PHP_EOL; var_导出(结果); echo PHP_EOL; 回显“子节点:

使用此代码:

使用Symfony\Component\domclawler\Crawler;
需要一次(uuu DIR_uuu.'/../vendor/autoload.php');
$html=html();
$children=$crawlerFiltered->eq($i)->children();
如果(计算(儿童)){
对于($j=0;$jeq($j)->html();
}
}
}
回显“父节点:”。PHP_EOL;
var_导出(结果);
echo PHP_EOL;
回显“子节点:”.PHP_EOL;
var_导出(结果);
我得到的结果是:

Parent Nodes:
array (
  0 => 'Hello World!',
  1 => 'Hello Crawler!',
  2 => 'OUTSIDE
            <span>
                Child SPAN
            </span>
            ',
  3 => '
                Child PARAGRAPH
            ',
)
Child Nodes:
array (
  0 => '
                Child SPAN
            ',
)
父节点:
排列(
0=>“你好,世界!”,
1=>“你好,爬虫!”,
2=>'外部
子跨度
',
3 => '
子段落
',
)
子节点:
排列(
0 => '
子跨度
',
)
这代表了以下问题:

  • 子结果:无DIV或P(仅内联标记)
  • 父结果:Pharmagraph没有标签,与SPAN不一致
  • 父结果:应仅包含第一个
    p
    ,因为第二个
    p
    (Pharmagraph)不包含 将
    body
    作为父母,但
    p
  • 您知道为什么会这样,以及如何解决上述问题吗?

    说明:

    DomCrawler将尝试自动修复HTML以匹配官方规范。例如,如果将
    标记嵌套在另一个
    标记中,它将被移动为父标记的同级。这是预期的,也是HTML5规范的一部分


    使用内置类可能会有更好的运气。大多数HTML解析器旨在处理并尝试纠正感知到的问题。

    事实上,不管这个问题的标题是什么,这实际上是为了与浏览器保持一致,如果与浏览器行为不匹配,这将是“不一致的”。
    Parent Nodes:
    array (
      0 => 'Hello World!',
      1 => 'Hello Crawler!',
      2 => 'OUTSIDE
                <span>
                    Child SPAN
                </span>
                ',
      3 => '
                    Child PARAGRAPH
                ',
    )
    Child Nodes:
    array (
      0 => '
                    Child SPAN
                ',
    )