Это была моя первая попытка, но она не сработала.
$this->crawler = $client->request('GET', $this->url);
$document = new \DOMDocument('1.0', 'UTF-8');
$root = $document->appendChild($document->createElement('_root'));
$this->crawler->rewind();
$root->appendChild($document->importNode($this->crawler->current(), true));
$selectorsToRemove = ['script','p'];
foreach ($selectorsToRemove as $selector) {
$crawlerInverse = $this->crawler->filter($selector);
foreach ($crawlerInverse as $elementToRemove) {
$parent = $elementToRemove->parentNode;
$parent->removeChild($elementToRemove);
}
}
$this->crawler->clear();
$this->crawler->add($document);
Я хочу получить теги «p» с этой страницы http://www.amazon.com/dp/B00IOY8XWQ/ref=fs_kv и кажется, что внутри абзаца есть несколько js, поэтому, когда я пытаюсь сделать $ node-> text (); он получает мне текст и JS внутри «сценария» внутри «р». Структура такова;
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<script>
"JS CODE"</script>
</p>
Так что я просто хочу текст Lorem ipsum.
Я взглянул на DomCrawler и не вижу в этом особой цели. Кажется, он просто оборачивается вокруг уже достаточно простого в использовании Расширение DOM, поэтому я собираюсь взять короткий путь и использовать его напрямую вместо этого.
Пример короткий и простой, вы должны быть в состоянии адаптировать его более или менее как есть. У вас есть готовый документ DOMDocument.
$html = <<<'HTML'
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<script>
"JS CODE"</script>
</p>
HTML;
$dom = new DOMDocument();
$dom->loadXML($html);
$xpath = new DOMXPath($dom);
foreach ($xpath->query('//p/script') as $node) {
$node->parentNode->removeChild($node);
}
echo $dom->saveXML();
<?xml version="1.0"?>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</p>
Других решений пока нет …