Php symfony 2 dom爬虫,用于循环并获取链接

Php symfony 2 dom爬虫,用于循环并获取链接,php,symfony,dom-events,Php,Symfony,Dom Events,我正在尝试传递html,以便找到标题和链接。现在我可以同时得到所有的标题,而我真的想一个接一个地浏览它们。我也不能得到链接,方法link();方法当我硬编码链接的实际名称时,返回一个错误 Current URI must be an absolute URL (""). 我需要的东西,将一个foreach循环,并获得标题和链接,代码如下,请帮助我 $html <<<<ol> <li cl

我正在尝试传递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);     
$html
$crawler=新的爬虫程序($html);
$message=$crawler->filterXPath('//ol')->text();
打印($message);
$link=$crawler->selectLink('1:Skywatchers等待日食')->link();
打印(链接);

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

按名称或alt值选择可单击图像的链接

DomCrawler确实有一种方法,根据遗嘱:

返回列表中节点的链接对象数组


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

$links = $crawler->filter('a')->links();
这将选择您拥有的所有a标记,如果您想要特定的标记,您需要一种方法来选择它们,如果您不需要,然后将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.

谢谢,但您可能在末尾错误地添加了)应该是$links=$crawler->filter('a')->links()?然后返回相同的错误,尽管“当前URI必须是一个绝对URL(“”)”,但我希望使用与此类似的方式simpleXml@GAV哦,是的,抱歉没有),好吧,这很奇怪,我最近已经和爬虫一起工作了,这很有效,我无法帮助您使用filterXPath,因为我从未使用过它,我更喜欢css选择器tho,但是如果您转储它,$crawler->filter('a')会返回什么呢?对象(Symfony\Component\domcawler\crawler)[263]受保护的“uri”=>null private“defaultNamespacePrefix”=>string“default”(长度=7)private“namespaces”=>array(大小=0)空private“baseHref”=>null我不确定如何实例化爬虫程序,你能使用$crawler=newcrawler()吗$爬虫->添加html内容(“您的html”);然后重试$html=links();变量转储($message);我得到这个错误消息“public function uu-construct(\doElement$node,$currentUri,$method='get'){if(!in_u-array(strtolower(substr($currentUri,0,4)),array('http','file')){throw new InvalidArgumentException(sprintf('currentUri必须是绝对URL(“%s”),$currentUri));}$this->setNode($node);您提供的第二、第三和第五个链接已停止工作。仅供参考