【问题标题】:How do I grab part of a page's HTML DOM with PHP?如何使用 PHP 抓取页面的 HTML DOM 的一部分?
【发布时间】:2011-12-10 15:15:49
【问题描述】:

我正在从已发布的谷歌电子表格中获取数据,我想要的只是内容 div (<div id="content">...</div>) 中的信息

我知道内容以<div id="content"> 开头,以</div><div id="footer"> 结尾

获取内部 DOM 部分的最佳/最有效方法是什么?我在考虑正则表达式(请参阅下面的示例),但它不起作用,我不确定它是否有效......

header('Content-type: text/plain');

$foo = file_get_contents('https://docs.google.com/spreadsheet/pub?key=0Ahuij-1M3dgvdG8waTB0UWJDT3NsUEdqNVJTWXJNaFE&single=true&gid=0&output=html&ndplr=1');

$start = '<div id="content">';
$end = '<div id="footer">';

$foo = preg_replace("#$start(.*?)$end#",'$1',$foo);

echo $foo;

更新

我想我的另一个问题基本上是关于使用带有起点和终点的正则表达式是否更简单、更容易,而不是尝试解析可能有错误的 DOM,然后提取我需要的部分。似乎正则表达式是可行的方法,但很想听听您的意见。

【问题讨论】:

标签: php regex parsing dom google-docs


【解决方案1】:

尝试将您的正则表达式更改为 $foo = preg_replace("#$start(.*?)$end#s",'$1',$foo);s 修饰符将 . 更改为包含新行。实际上,您的正则表达式必须与同一行上的标签之间的所有内容相匹配。

如果您的 HTML 页面比这更复杂,那么正则表达式可能不会削减它,您需要查看像 DOMDocumentSimple HTML DOM 这样的解析器

【讨论】:

    【解决方案2】:

    如果你有很多事情要做,我建议你看看http://simplehtmldom.sourceforge.net 真的很适合这种事情。

    【讨论】:

      【解决方案3】:

      不要使用正则表达式,它可能会失败。 使用 PHP 的内置 DOM 解析: http://php.net/manual/en/class.domdocument.php

      您可以轻松遍历和解析相关内容。

      【讨论】:

      • 似乎正则表达式比尝试加载和解析可能有错误的 DOM 失败的可能性更小......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 2021-05-18
      • 1970-01-01
      相关资源
      最近更新 更多