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 => '
子跨度
',
)
这代表了以下问题:
p
,因为第二个p
(Pharmagraph)不包含
将body
作为父母,但p
标记嵌套在另一个
标记中,它将被移动为父标记的同级。这是预期的,也是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
',
)