【问题标题】:Can't select link无法选择链接
【发布时间】:2015-11-21 04:41:20
【问题描述】:

我正在尝试抓取每个 .row 的 href。最终,我也想点击链接并访问它链接的 DOM,但我无法获得 Link 对象或 href 属性..

不确定 a 属性中没有任何文本是否是一个问题,但这是我必须使用的 DOM。

帮助?

<?php require 'vendor/autoload.php';

use Symfony\Component\DomCrawler\Crawler;

$html = <<<'HTML'
<!doctype html>
<html>
  <body>
    <div class="content">
      <p class="row"><a href="/uri1"></a></p> 
      <p class="row"><a href="/uri2"></a></p> 
      <p class="row"><a href="/uri3"></a></p> 
    </div>
  </body>
<html>
HTML;

$dom = new Crawler($html);

$content = $dom->filter('.row');
$rows = [];

foreach ($content as $element)
{
    $node = new Crawler($element);
    $link = $node->filter('a');
    echo $link->html(); // Empty?

    try 
    {
        $link = $node->selectLink('')->link();
        echo $link->getUri();
    } 
    catch (Exception $ex) 
    {
        // Throws: Current URI must be an absolute URL ("").Current URI must be 
        // an absolute URL ("").Current URI must be an absolute URL ("").
        echo $ex->getMessage();
    }

}

【问题讨论】:

    标签: php symfony web-scraping css-selectors domcrawler


    【解决方案1】:

    我使用 xpath 来通过 DomCrawler 过滤 DOM 元素,因为我喜欢这样我可以更好地控制我正在过滤的内容。下面的代码应该在你的 html 中回显 url。

    $crawler = new Crawler($html);
    
    $crawler->filterXPath("//p[@class='row']")->each(function (Crawler $node, $i) {
    
    $url = $node->filterXPath("//a/@href")->text();
    echo $url;
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 2016-03-26
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多