Php 如何使用symfonydomcrawler过滤或提取不包括span的链接元素,并将它们保存在逗号分隔的数组中?
Php 如何使用symfonydomcrawler过滤或提取不包括span的链接元素,并将它们保存在逗号分隔的数组中?,php,arrays,symfony,xpath,domcrawler,Php,Arrays,Symfony,Xpath,Domcrawler,,goutte,dom爬虫,guzzle,web刮刀 ,goutte,dom爬虫,guzzle,web刮刀 ,dom爬虫, 你需要刮什么?有span标记的标记?只有a标记文本而不是span标记中的文本,用逗号分隔。仅链接文本?是的,链接文本仅用逗号分隔。@Coolsain根据您预期输出的上一个索引,它包含web scraster,这是一个打字错误,因为它包含在span标记中。我预期会出现类似的情况对于我的symfony dom爬虫脚本$links['tag']=$crawler->filter
,goutte,dom爬虫,guzzle,web刮刀
,goutte,dom爬虫,guzzle,web刮刀
,dom爬虫,
你需要刮什么?有span标记的标记?只有a标记文本而不是span标记中的文本,用逗号分隔。仅链接文本?是的,链接文本仅用逗号分隔。@Coolsain根据您预期输出的上一个索引,它包含web scraster
,这是一个打字错误,因为它包含在span标记中。我预期会出现类似的情况对于我的symfony dom爬虫脚本$links['tag']=$crawler->filter('span.tl>:not(span))->每个(函数($node){return$node->text();})@我的帖子怎么了?你能告诉我丢失了什么吗?我相信它解决了问题,但在我的例子中,我使用的是symfony domcrawler的crawler对象。
<?php
ini_set('display_errors', 1);
$string=<<<HTML
<span class="tl">
<a href="/en/laravel/" class="c">laravel</a>, <span>goutte</span>, <a href="/en/html/">html</a>, <span>dom crawler</span>, <a href="/en/form/">form</a><span>guzzle</span>, <span>web scrapper</span>
</span>
<span class="tl">
<a href="/en/laravel/" class="c">laravel</a>, <span>goutte</span>, <a href="/en/elequent/">elequent</a>, <span>dom crawler</span>, <span>guzzle</span>, <a href="/en/orm/">orm</a>, <span>web scrapper</span>
</span>
<span class="tl">
<a href="/en/laravel/" class="c">laravel</a>, <a href="/en/goutte">goutte</a>, <a href="/en/php/">php</a>, <span>dom crawler</span>, <a href="/en/guzzle">guzzle</a>, <span>web scrapper</span>
</span>
HTML;
$domDocument = new DOMDocument();
$domDocument->loadHTML($string);
$domXPath = new DOMXPath($domDocument);
$results = $domXPath->query('//span[@class="tl"]');
$data=array();
foreach($results as $result)
{
$tempArray=array();
$aNodes=$domXPath->query(".//a",$result);
foreach($aNodes as $aNode)
{
if($aNode instanceof DOMElement)
{
$tempArray[]=$aNode->nodeValue;
}
}
$data[]= implode(", ", $tempArray);
}
print_r($data);