symfony 2 dom crawler循环并获取链接

时间:2015-03-20 16:11:59

标签: php symfony dom-events

我试图传递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);     

2 个答案:

答案 0 :(得分:2)

您可以使用过滤器并使用css选择器选择您的链接,如:

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

答案 1 :(得分:1)

您收到的错误实际上是从Symfony \ DomCrawler \ Link constructor中抛出的InvalidArgumentException。这意味着您向selectLink()方法提供的值不是有效名称,如API中所示:

  

按可点击图片的名称或alt值选择链接。

DomCrawler确实使用了根据links()API Documentation方法:

  

返回列表中节点的Link对象数组。