使用PHP的DOMDocument仅显示某些HTML

时间:2011-02-22 04:59:04

标签: php html image curl

我希望在我的网站内绘制网页的html。

采取这种情况:

我有一个检查酒店可用性的网站。但不是在我的服务器上托管该酒店的图像。我简单的卷曲,酒店网站上的一个特定页面,包含他们的图像。

我可以从html中获取任何内容并将其显示在我的网站上吗?使用他们的HTML代码,但只使用我想要显示的div或图像?

我正在使用此代码,源自:

http://davidwalsh.name/download-urls-content-php-curl

作为练习和论点,让我们尝试在其主页上显示Google的徽标。

function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$returned_content = get_data('http://www.google.com');
echo '<base href="http://www.google.com/" />';
echo $returned_content;

感谢@alex我开始在PHP的lib中使用DOMDocument。但是,我遇到了麻烦。

    function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

$url = "www.abc.net.au";
$html = get_data($url);

$dom = new DOMDocument;
@$dom->loadHTML($html);
$logo = $dom->getElementById("abcLogo");
var_dump($logo);

返回:object(DOMElement)[2]

我如何进一步解析这个?或者只需使用该ID打印/回显DIV的内容。?

3 个答案:

答案 0 :(得分:2)

是的,通过类似DOMDocument的方式运行生成的HTML,以提取所需的部分。

答案 1 :(得分:1)

echo $logo->nodeValue应该有效,因为你只能通过id获得1个元素!

答案 2 :(得分:1)

找到DOM元素后,获取元素本身的HTML(而不仅仅是其内容)可能有点棘手。

您可以使用DOMDocument::saveXML

轻松获取单个元素的XML值
echo $dom->saveXML($logo);

这对你来说可能已经足够了。我相信会有一个变化,它会将此功能添加到saveHTML