Как я могу пропустить или удалить список тегов html из моего объекта-сканера, используя Symfony DomCrawler Component и Goutte для Laravel 4?

Это была моя первая попытка, но она не сработала.

$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.

2

Решение

Я взглянул на 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>
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]