gpt4 book ai didi

php - 如何使用 Goutte 和 Symfony DomCrawler 从样式 = "..."的父 div 中过滤子节点值?

转载 作者:行者123 更新时间:2023-12-05 07:55:00 24 4
gpt4 key购买 nike

我正在尝试使用 php 包 Goutte 从给定的 wikiquote 页面中抓取引号,它包装了 Symfony 组件:BrowserKit、CssSelector 和 DomCrawler .

但是在我的结果集中有一些我不想要的引述,来自 misattributed section 的引述.

这是我目前所拥有的:

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'http://en.wikiquote.org/wiki/Thomas_Jefferson');

//grab all the children li's from the wikiquote page
$quotes = $crawler->filter('ul > li');

$quoteArray = [];

//foreach li with a node value that does not start with a number, push the node value onto quote array
//this filters out the table of contents <li> node values which I do not want

foreach($quotes as $quote)
{
if(!is_numeric(substr($quote->nodeValue, 0, 1)))
{
array_push($quoteArray, $quote->nodeValue);
}
}

此时我关注的问题是如何从错误归因部分中过滤掉引号。此部分包含在具有 style 属性的父级 div 中:

style="padding: .5em; border: 1px solid black; background-color:#FFE7CC"

我在想,如果我能以某种方式从这个特定部分获取 li 节点值,我就可以从上面的 $quoteArray 中过滤掉它们。我遇到的问题是我无法弄清楚如何从此部分中选择子 li 节点值。

我试过选择具有以下变化的 child :

$badQuotes = $crawler->filter('div[style="padding: .5em; border: 1px solid black; background-color:#FFE7CC"] > ul > li');

但这并没有返回我需要的节点值。有谁知道该怎么做或我做错了什么?

最佳答案

DomCrawler filter方法将

Filters the list of nodes with a CSS selector.

这不如使用 xpath 强大。我猜 CSS 选择器无法将您的复杂查询转换为 xpath 表达式。所以,一个复杂的过滤器应该由 filterXPath 完成。而不是方法

Filters the list of nodes with an XPath expression.

因此,在您的情况下,请尝试使用 filterXPath 方法:

$crawler->filterXPath("//div[contains(@style,'padding: .5em; border: 1px solid black; background-color:#FFE7CC')]");

关于php - 如何使用 Goutte 和 Symfony DomCrawler 从样式 = "..."的父 div 中过滤子节点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com