symfony 2 dom crawler для просмотра и получения ссылок

Я пытаюсь передать HTML, чтобы я мог найти заголовок и ссылку. В настоящий момент я могу получить все названия одновременно, когда я действительно хочу просмотреть их один за другим. Также я не могу получить ссылку, метод link (); метод, когда я жестко кодирую реальное имя ссылки, возвращается, ошибка

          Current URI must be an absolute URL ("").

Мне нужно что-то, что будет цикл foreach и получить заголовок и ссылку, код ниже, пожалуйста, помогите мне

    $html <<<<ol>
<li
class="first-child ol1">
<a href="http://link1"class="story">
<span class="livestats-icon livestats-1">1:</span>  Skywatchers await solar eclipse</a>
</li>
<li
class="ol2">
<a
href="http://link2"class="story">
<span
class="livestats-icon livestats-2">2: </span>Indians caught 'cheating' in exams</a>
</li>
<li
class="ol3">
<a
href="http://link3"class="story">
<span
class="livestats-icon  livestats-3">3: </span>Hunting for Prince's vault</a>
</li>
</ol>>>>html
$crawler = new Crawler($html);

$message = $crawler->filterXPath('//ol')->text();

print_r($message);$link = $crawler->selectLink('1: Skywatchers await solar eclipse')->link();print_r($link);

1

Решение

Вы можете использовать фильтр и выбирать ссылки, используя css selector, например:

$links = $crawler->filter('a')->links());

Это выберет все те теги, которые у вас есть, если вы хотите конкретные теги, вам нужен способ выбрать их, если вы не добавите класс css к тегам, которые вам нужно выбрать, и:

$links = $crawler->filter('.myclass')->links());

Он вернет массив ссылок.

Правда только что попробовал ваш код, вам нужен URI, как говорится в сообщении об ошибке … я думал, что он не сработал где-то еще, но он не работает в конструкции сканера …

$crawler = new Crawler($html, 'http'); //http is not a valid uri obviously but it does the trick if you dont need the uri.
2

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

Ошибка, которую вы получаете, на самом деле является InvalidArgumentException, который выдается изнутри Symfony \ DomCrawler \ Link конструктор. Это означает, что ценность, которую вы предоставляете selectLink () метод не является допустимым именем, как показано в API:

Выбирает ссылки по имени или альтернативному значению для кликабельных изображений.

DomCrawler действительно имеет ссылки () метод, который в соответствии с Документация по API будут:

Возвращает массив объектов Link для узлов в списке.

1

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