我正在尝试使用Symfony Crawler。
所以我检查了这个article。
我想要做的是获得3,335.00
(第二个参数)
现在,我尝试这样的句子,但这是错误的。
$crawler = $crawler->filter('body > div[@class="cell_label"]');
我该怎么做?
<body>
<div class="cell__label"> Value1 </div> <div class="cell__value cell__value_"> 2,355.00 </div>
<div class="cell__label"> Value2 </div> <div class="cell__value cell__value_"> 3,355.00 </div>
<div class="cell__label"> Value3 </div> <div class="cell__value cell__value_"> 4,355.00 </div>
</body>
$crawler = new Crawler($url);
$crawler = $crawler->filter('body > div[@class="cell_label"]');//// no work...
foreach ($crawler as $domElement) {
var_dump($domElement);
}
答案 0 :(得分:1)
我可以在这里看到几个问题:
使用$crawler->filter()
表示您必须将css选择器作为参数传递,而不是XPath表达式,因此如果您需要选择所有'body > div.cell__label'
,请使用'body div[class^="cell__"]'
或div
}以一个以cell__
开头的类,顺便提一下cell_label
(一个下划线)中的拼写错误。
Crawler accepts DOMNodeList , DOMNode , array 或 string 构造函数参数,而不是远程资源的URL(但我认为它可能只是您在那里使用的任意变量名称)。从技术上讲,url也是一个字符串,但不是XML格式的字符串。
如果要使用XPath表达式,请使用$crawler->filterXPath()
,如下所示:
$nodes = $crawler->filterXPath('//div[contains(@class, "cell__label")]');
以下是有关如何使用XPath的文档 - https://www.w3.org/TR/xpath/
答案 1 :(得分:0)
Crawler过滤器可以像选择器一样处理jQuery,所以你可以:
$crawler = $crawler->filter('.cell__value');