我有这个代码
require_once'vendor/autoload.php';
使用Symfony''Component''DomCrawler''Ccrawler;
$html = <<<'HTML'
<!DOCTYPE html>
<html>
<body>
<p class="message">Hello World!
<span>This is span</span>
</p>
<p>Hello Crawler!
<span>This is span</span>
</p>
</body>
</html>
HTML;
$crawler = new Crawler($html);
foreach ($crawler->filter('body') as $domElement) {
$domElement->filter('span');
}
我收到这个错误。
Fatal error: Call to undefined method DOMElement::filter()
我需要知道如何在Foreach循环中使用CSS Selectors
选择元素?
我找了很多,但什么也没找到。
只需使用文档中的示例
$crawler = new Crawler($html);
$crawler->filter('body')->each(function(Crawler $node, $i){
return $node->filter('span');
});
或者做->each('Closure $closure)
函数在引擎盖下做的工作:实例化循环内的爬网程序节点
foreach ($crawler->filter('body') as $domElement) {
$domElement = new Crawler($domElement);
$domElement->filter('span');
}
错误在这一行:
$domElement->filter('span');
原因是$domElement不属于Crawler类,因此不知道filter方法。
有很多方法可以解决这个问题。
例如,您可以直接针对span
标签:
foreach ($crawler->filter('span') as $spanElement) {
// do something basic with $spanElement
}
或者在第一个过滤器的返回值上应用第二个过滤器(也是爬网程序实例):
$crawlerBodies = $crawler->filter('body');
$crawlerSpans = $crawlerBodies->filter('span');
或使用filterXPath
:
$crawlerSpans = $crawler->filterXPath('//span');
或者将DOMElement对象转换回Crawler的对象:
foreach ($crawler->filter('body') as $domElement) {
$domElement = new Crawler($domElement);
$domElement->filter('span');
}