2016-12-01 49 views
1

我使用YQL(https://developer.yahoo.com/yql/),但每个应用程序的限制(通过您的访问密钥识别):每天100,000电话和每个IP限制:/ V1 /公/ :每小时2000调用;/v1/yql/:每小时拨打20,000个电话。如何使用XP提取HTML,如YQL使用PHP?

我需要无限制的查询。如何使用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); 

如果可能的话则如何提取完整的HTML像使用PHP YQL JSON/XML?

+0

使用$ xpath-> query()来获取所需的节点。 – Borna

+0

查看更新问题@Borna – hube

+0

我什么都看不到新^^ – Borna

回答

0

有几种方法,你可以做进一步的处理,一个是做另一个查询。要获得跨度节点,可以使用以下查询:

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

您正在做的是在给定节点下进行搜索。

p.s.不要使用attributes属性作为数组(attribute [“attributeName”]),因为它在某些PHP版本中不起作用。