我正在尝试使用PHP脚本将一些网页保存为文本文件。
如何使用PHP将网页加载到文件缓冲区并删除HTML标记?
答案 0 :(得分:62)
fopen()
或file_get_contents()
网址:fopen("http://google.com/", "r")
http_get()
模块 http
fsockopen()
或stream_socket_client()
wget
curl
或system()
但这些都不能保证在您的服务器上可用。
答案 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类传递它(如果你需要登录等)