如何在PHP中阅读网页

时间:2010-02-13 18:36:16

标签: php web

我正在尝试使用PHP脚本将一些网页保存为文本文件。

如何使用PHP将网页加载到文件缓冲区并删除HTML标记?

4 个答案:

答案 0 :(得分:62)

但这些都不能保证在您的服务器上可用。

答案 1 :(得分:6)

一种方式:

$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);

上面的代码只是一个例子,没有任何(!)错误检查和处理。

答案 2 :(得分:2)

正如其他答案所说,标准的PHP流功能或cURL是检索 HTML的最佳选择。至于删除标签,这里有几种方法:

选项#1 :如果服务器上有可用的Tidy扩展,则递归遍历文档树并从节点返回文本。像这样:

function textFromHtml(TidyNode $node) {
    if ($node->isText()) {
        return $node->value;
    } else if ($node->hasChildren()) {
        $childText = '';
        foreach ($node->child as $child)
           $childText .= textFromHtml($child);
        return $childText;
    }
    return '';
}

你可能想要一些比这更复杂的东西,例如,用新行代替<br />标签(其中$node->name == 'br'),但这样做是为了开始。

然后,将HTML文本加载到Tidy对象中,并在body节点上调用您的函数。如果您有字符串中的内容,请使用:

$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());

选项#2 :使用正则表达式删除<>之间的所有内容。您可以(也可能应该)开发更复杂的正则表达式,例如,只匹配有效的HTML开始或结束标记。如果你不小心,页面的synax中的任何错误,如正文中的杂散角括号,都可能意味着垃圾输出。这就是为什么Tidy非常好(它专门用于清理坏页面),但它可能无法使用。

答案 3 :(得分:0)

我强烈建议您查看SimpleHTML DOM类;

SimpleHTML DOM Parser at SourceForge

有了它,你可以使用css选择器搜索DOM树,比如jQuery的$()函数或prototypeJS $$()函数。

虽然它可以与file_get_contents()一起使用来获取网页的内容,但是你只能用你的一些cURL类传递它(如果你需要登录等)