Я пытаюсь передать 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);
Вы можете использовать фильтр и выбирать ссылки, используя 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.
Ошибка, которую вы получаете, на самом деле является InvalidArgumentException, который выдается изнутри Symfony \ DomCrawler \ Link конструктор. Это означает, что ценность, которую вы предоставляете selectLink () метод не является допустимым именем, как показано в API:
Выбирает ссылки по имени или альтернативному значению для кликабельных изображений.
DomCrawler действительно имеет ссылки () метод, который в соответствии с Документация по API будут:
Возвращает массив объектов Link для узлов в списке.