不能selectlink
Can't select link
我正在尝试抓取每个 .row 的 href。最后,我想单击 link 并访问 DOM 它也 links,但我无法获得 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();
}
}
我使用 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;
}
我正在尝试抓取每个 .row 的 href。最后,我想单击 link 并访问 DOM 它也 links,但我无法获得 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();
}
}
我使用 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;
}