1

我正在尝试使用 Symfony Crawler。

所以我检查了这篇文章

我想要做的是得到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);
}
4

2 回答 2

1

我可以在这里看到几个问题:

  1. 使用$crawler->filter()意味着您必须将 css 选择器作为参数传递,而不是 XPath 表达式,因此使用,'body > div.cell__label'或者'body div[class^="cell__"]'如果您需要选择所有div以 开头的类cell__,顺便说一句,您有一个错字cell_label(一个下划线)。

  2. Crawler接受 DOMNodeList,或作为构造函数参数DOMNode,而不是远程资源的 url(但我认为它可能只是您在那里使用的任意变量名)。从技术上讲,url 也是一个字符串,但不是 XML 格式的字符串。arraystring

  3. 如果您想使用 XPath 表达式,请使用$crawler->filterXPath(),如下所示:

    $nodes = $crawler->filterXPath('//div[contains(@class, "cell__label")]');

这是有关如何使用 XPath 的文档 - https://www.w3.org/TR/xpath/

于 2017-09-20T01:33:31.120 回答
0

爬虫过滤器可以像选择器一样处理 jQuery,因此您可以:

$crawler = $crawler->filter('.cell__value');

于 2017-09-20T03:24:13.510 回答