2017-05-29 2 views
1

スパンを除くリンク要素をフィルタリングまたは抽出し、symfony domクローラを使用してカンマ区切りで保存する方法は?

<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>, <a href="/en/web-scrapper">web scrapper</a> 
 
</span>

私はこの

array (size=3) 
    0 => string 'laravel, html, form' (length=19) 
    1 => string 'laravel, elequent, orm' (length=22) 
    2 => string 'laravel, goutte, php, guzzle, web scrapper' (length=43) 
+0

何をこすりする必要がないように、アレイ内の情報を抽出したいですか?その中にスパンタグを持っているタグ? – Webinion

+0

タグのみのテキストは、カンマで区切られたスパンタグ内のテキストではありません。 – coolsaint

+0

リンクテキストのみ? – Webinion

答えて

1

Try this code snippet here

<?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); 
+0

symfony domクローラスクリプトでこのようなことを期待していました $ links ['tag'] = $ crawler-> filter( 'span.tl>:not(span) ') - > each(function($ node){ return $ node-> text(); }); – coolsaint

+0

@coolsaint投稿に何が間違っていますか?あなたは何が欠けているか教えていただけますか? –

+0

私はそれが問題を解決すると信じていますが、私の場合、symfony domcrawlerがクローラオブジェクトを使用しています。 – coolsaint

関連する問題