【问题标题】:How to read a web page in PHP如何在 PHP 中读取网页
【发布时间】:2011-01-16 14:57:37
【问题描述】:

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

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

【问题讨论】:

    标签: php web


    【解决方案1】:

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

    【讨论】:

    • @YourCommonSense 我认为重要的部分是调用外部工具通过system()。他还提到了 cURL 库并将其称为“智能方式”。
    【解决方案2】:

    一种方式:

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

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

    【讨论】:

      【解决方案3】:

      正如其他答案所说,标准的 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 开始或结束标记。如果您不小心,页面语法中的任何错误(例如正文中的尖括号)都可能意味着垃圾输出。这就是 Tidy 如此出色的原因(它专门用于清理不良页面),但它可能不可用。

      【讨论】:

        【解决方案4】:

        我强烈建议你看看 SimpleHTML DOM 类;

        SimpleHTML DOM Parser at SourceForge

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-16
          • 1970-01-01
          • 2022-01-23
          • 1970-01-01
          • 2011-03-19
          • 1970-01-01
          • 2012-12-10
          • 1970-01-01
          相关资源
          最近更新 更多