我有这段代码
require_once'proforts / autoload.php';
使用Symfony \ Component \ DomCrawler \ Crawler;
$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
选择元素?
我搜索了很多但没有找到任何东西。
答案 0 :(得分:4)
只使用您在docs
中的示例$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');
}
答案 1 :(得分:3)
错误在这一行:
$domElement->filter('span');
原因是 $ domElement 不属于 Crawler 类,因此不知道过滤器方法。
有很多方法可以解决这个问题。
例如,您可以直接定位span
代码:
foreach ($crawler->filter('span') as $spanElement) {
// do something basic with $spanElement
}
或对第一个过滤器的返回值应用第二个过滤器(同样是 Crawler 实例):
$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');
}