首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中阅读网页

如何在PHP中阅读网页
EN

Stack Overflow用户
提问于 2010-02-14 02:36:16
回答 4查看 57.3K关注 0票数 15

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

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

EN

回答 4

Stack Overflow用户

发布于 2010-02-14 05:18:22

简单的方式:使用 library

  • The或
  • 网址:fopen("http://google.com/", "r")
  • The智能方式:使用 library
  • The的其他智能方式:从PHP模块http_get() http
  • 困难的方式:手工创建一个HTTP请求并使用或
    • 发送C方式:使用 file_get_contents()发送一个HTTP请求:通过调用外部工具,如d21或d22

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

票数 67
EN

Stack Overflow用户

发布于 2010-02-14 10:30:01

一种方法:

代码语言:javascript
复制
$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);

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

票数 7
EN

Stack Overflow用户

发布于 2010-02-14 11:04:37

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

Tidy选项#1:使用Tidy扩展(如果在服务器上可用)递归地遍历文档树并从节点返回文本。如下所示:

代码语言:javascript
复制
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节点上调用您的函数。如果内容在字符串中,请使用:

代码语言:javascript
复制
$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());

选项#2:使用正则表达式剥离<>之间的所有内容。您可以(也许应该)开发一个更复杂的正则表达式,例如,它只匹配有效的HTML开始或结束标记。页面的同步线中的任何错误,如正文中的错位尖括号,如果您不小心,都可能意味着垃圾输出。这就是为什么Tidy如此优秀(它是专门为清理坏页面而设计的),但它可能不可用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2259892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档