2016-12-01 6 views
1

私はYQL(https://developer.yahoo.com/yql/)を使用していますが、アプリケーション制限(アクセスキーで識別)を使用しています:1日あたり100,000コール、IP制限あたり:/ v1/public/:/v1/yql/:1時間あたり20,000コール。PHPを使ってYQLのようなXPathを使ってHTMLを抽出する方法は?

無制限のクエリが必要です。 PHPを使ってYQLのようなXPathを使ってHTMLを抽出する方法

$homepage = file_get_contents('https://google.com'); 
$dom = new DOMDocument(); 
$dom->loadHTML($homepage); 

$xpath = new DOMXPath($dom); 
$result = ''; 
foreach($xpath->evaluate('div') as $childNode) { 
    $result .= $dom->saveHtml($childNode); 
} 
var_dump($result); 

このサンプルはウェブから見つかりましたが、動作していません。

編集

$homepage = file_get_contents('https://google.com'); 
    $dom = new DOMDocument(); 
    $dom->loadHTML($homepage); 

    $xpath = new DOMXPath($dom); 
    $result = ''; 
    foreach($xpath->query('//a[@class="touch"]') as $childNode) { 

     // if output <a class="touch" href="url"><span alt="demo1" title="title2">Content</span> some</a> , How to get href/url and child tag span attribute alt/title ? 

     $result .= $dom->saveHtml($childNode); 
    } 
    var_dump($result); 

可能な場合は、PHPを使ってYQLのようなJSON/XMLに完全なHTMLを抽出するには、その後どのように?

+0

$ xpath-> query()を使用して目的のノードを取得します。 – Borna

+0

更新された質問を見る@Borna – hube

+0

何も新しいことはありません^^ – Borna

答えて

0

さらに処理する方法はいくつかありますが、もう1つは別のクエリを実行することです。スパンノードを取得するには、次のクエリを使用します。

$span = $xpath->query('./span', $childNode); // all spans 
$span->item(0)->attributes->getNamedItem("alt")->nodeValue; // first span 

あなたがやっていることは、指定されたノードの下での検索です。

P.S. attributesプロパティを配列(attributes ["attributeName"])として使用しないでください。PHPのバージョンによっては動作しないためです。

関連する問題