Я пытаюсь очистить цитаты с данной страницы викицитата, используя пакет php Goutte, который обертывает компоненты Symfony. : BrowserKit, CssSelector и DomCrawler.
Однако есть определенные цитаты, которые мне не нужны в моем наборе результатов, цитаты из раздела с неверным атрибутом а>.
Вот что у меня есть до сих пор:
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);
}
}
Проблема, на которой я сейчас сосредоточусь, заключается в том, как отфильтровать цитаты из раздела с неверными атрибутами. Этот раздел содержится в родительском разделе div
, который имеет атрибут style
:
style="padding: .5em; border: 1px solid black; background-color:#FFE7CC"
Я подумал, что если я смогу каким-то образом получить значения узла li
из этого конкретного раздела, я смогу затем отфильтровать их из моего выше $quoteArray
. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как выбрать значения дочерних узлов li
из этого раздела.
Я попытался выбрать детей с вариациями следующего:
$badQuotes = $crawler->filter('div[style="padding: .5em; border: 1px solid black; background-color:#FFE7CC"] > ul > li');
Но это не возвращает значения узлов, которые мне нужны. Кто-нибудь знает, как это сделать или что я делаю неправильно?