【问题标题】:PHP get external page contentPHP获取外部页面内容
【发布时间】:2011-02-11 02:49:38
【问题描述】:

我使用file_get_contens 从另一个站点获取 html,我的问题是如何获取特定的标记值?

假设我有:

<div id="global"><p class="paragraph">1800</p></div>

我怎样才能得到段落的价值?谢谢

【问题讨论】:

  • 应该是file_get_contents()

标签: php parsing file-get-contents


【解决方案1】:

您需要解析 HTML。有几种方法可以做到这一点,包括使用 PHP 的 XML 解析函数。

但是,如果它只是一个简单的值(如您上面所问),我将使用以下简单代码:

// your content
$contents='<div id="global"><p class="paragraph">1800</p></div>';

// define start and end position
$start='<div id="global"><p class="paragraph">';
$end='</p></div>';

// find the stuff
$contents=substr($contents,strpos($contents,$start)+strlen($start));
$contents=substr($contents,0,strpos($contents,$end));

// write output
echo $contents;

祝你好运!

克里斯蒂安·西贝拉斯

(经过测试和工作)

【讨论】:

  • 如果您想要更大的灵活性,我建议您使用 Michael Mrozek 的答案。但是,我不鼓励使用 RegExp,尤其是在这种情况下:[1] 与简单的传统方法相比,它们速度较慢。 [2] 它们更难维护。 [3] 它们暗示你了解它们,这可能不是你想花很多时间在上面的东西。
【解决方案2】:
preg_match_all('#paragraph">(.*?)<#is', $input, $output);

print_r($output);

未经测试。

【讨论】:

    【解决方案3】:
    $input  = '<div id="global"><p class="paragraph">1800</p></div>';
    $output = strip_tags($input);
    

    【讨论】:

    • 他想使用file_get_contents(),而他给出的示例可以在示例网站中找到。
    • 我知道。但是,如果他的网站只有一个 &lt;div&gt; 和一个值怎么办? :)
    【解决方案4】:

    如果这个例子真的很简单,你可以使用正则表达式。不过,对于通用 HTML 解析,PHP 支持 DOM:

    $dom = new domDocument();
    $dom->loadHTML("<div id=\"global\"><p class=\"paragraph\">1800</p></div>");
    echo $dom->getElementsByTagName('p')->item(0)->nodeValue;
    

    【讨论】:

    • 如果我想按类名获取元素?
    • 我不认为有一种方法可以做到这一点,DOM 通常没有它,您需要遍历节点并检查每个节点。 php.net/manual/en/class.domdocument.php
    猜你喜欢
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多