【问题标题】:How to Extract HTML using XPath like YQL using php?如何使用 XPath 提取 HTML,如使用 php 的 YQL?
【发布时间】:2017-04-15 23:00:43
【问题描述】:

我正在使用 YQL (https://developer.yahoo.com/yql/),但每个应用程序限制(由您的访问密钥标识):每天 100,000 次调用和每个 IP 限制:/v1/public/:每小时 2,000 次调用; /v1/yql/:每小时 20,000 个电话。

我需要无限制的查询。如何使用 XPath 提取 HTML,如使用 php 的 YQL。

$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 一样将完整的 HTML 提取到 json/xml 中?

【问题讨论】:

  • 使用 $xpath->query() 获取所需的节点。
  • 查看更新的问题@Borna
  • 我没有看到新的 ^^
  • 我需要像 yql(json/xml) 这样的输出。如何获得?
  • 为什么在 json 中需要它?你不能只解析 dom 来获取特定数据吗?

标签: php json xml xpath yql


【解决方案1】:

您可以通过多种方式进行进一步处理,一种是通过执行另一个查询。要获取跨度节点,可以使用以下查询:

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

你正在做的是在给定的节点下搜索。

附言不要将 attributes 属性用作数组 (attributes["attributeName"]),因为它在某些版本的 PHP 中不起作用。

【讨论】:

    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2015-07-27
    • 2010-12-05
    • 2013-04-05
    • 2021-11-09
    相关资源
    最近更新 更多