是否可以使用Symfony Dom crawler通过regexp进行搜索?
它强大的解析html内容的能力,在它的文档中描述了一些基本的选择,如filter'body>p'或更复杂的xpath,如//span[contains@id,第条-]是否可以使用Symfony Dom crawler通过regexp进行搜索?,symfony,parsing,dom,domcrawler,Symfony,Parsing,Dom,Domcrawler,它强大的解析html内容的能力,在它的文档中描述了一些基本的选择,如filter'body>p'或更复杂的xpath,如//span[contains@id,第条-] 是否可以通过正则表达式获取元素?也许类似的东西是可用的:filter'body'->filter'div.*-timeLabel-*' 像这样的?修改了文档中应用匿名函数的一个示例 $nodeValues = $crawler->filter('body')->each(function (Crawler $node,
是否可以通过正则表达式获取元素?也许类似的东西是可用的:filter'body'->filter'div.*-timeLabel-*' 像这样的?修改了文档中应用匿名函数的一个示例
$nodeValues = $crawler->filter('body')->each(function (Crawler $node, $i) {
// regex and return $node->attr('class')
});
我不确定,但我认为答案是肯定的,因为爬虫调用的过滤方法 此方法使用CssSelectorConverter,根据文档,您可以将表达式作为参数传递 /** *将CSS表达式转换为其XPath等价物。 * *或者,可以向生成的XPath添加前缀 *带有$prefix参数的表达式。 * *@param string$cssExpr CSS表达式 *@param string$prefix是XPath表达式的可选前缀 * *@返回字符串 */ 公共函数toXPath$cssExpr,$prefix='后代或自身::' { 返回$this->translator->cssToXPath$cssExpr,$prefix; }
在XPath 2.0中,可以使用匹配项:
$crawler->filterXPath("//div[matches(@id, '*-timeLabel-*')]");
但是,如果您没有可用的XPath,那么最好尝试并组合其他XPath,例如,这应该对您的情况起到作用:
$crawler->filterXPath("//div[contains(@id, '*-timeLabel-*')]");