0

各 .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();
    }

}
4

1 に答える 1

0

私は DomCrawler で DOM 要素をフィルタリングするために xpath を使用しています。以下のコードは、HTML の URL をエコーする必要があります。

$crawler = new Crawler($html);

$crawler->filterXPath("//p[@class='row']")->each(function (Crawler $node, $i) {

$url = $node->filterXPath("//a/@href")->text();
echo $url;

}
于 2015-11-21T16:14:22.943 に答える