【问题标题】:How to extract only certain data with file_get_contents如何使用 file_get_contents 仅提取某些数据
【发布时间】:2011-11-26 01:19:07
【问题描述】:
如何使用file_get_contents() 提取$homepage 变量的某一部分?
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
【问题讨论】:
标签:
php
web
web-scraping
file-get-contents
【解决方案1】:
你的问题问得不是很多,但是在抽象层面上,我相信你正在寻找字符串操作课程:) 这里是我分享的几个链接,
顺便说一句,这完全取决于您要提取的内容,如果您可以详细说明详细问题,这将有助于我们及时回答您!
干杯
PS:屏幕抓取是一个坏主意,除非您正在抓取自己的网页(这确实有意义:))。原因是您永远不知道 WWW.EXAMPLE.COM 何时会发生变化,而您的操作逻辑将不再有用
【解决方案2】:
最好的解决方案可能是在加载$homepage 变量后对其进行处理。看看String functions 和regular expressions。
file_get_contents() 支持offset 和maxlen 选项,这些选项可用于控制文件的哪些部分被加载,但offset 的行为被文档描述为在用于非本地文件时“不可预测”就像你的例子一样。
也就是说,maxlen 可能是安全的,因此如果您知道您想要的内容将出现在文件的前 N 位中,您可以使用它来修剪结尾。因此,如果您确定只需要主页的前 100 个字节,则可以执行file_get_contents ( 'http://www.example.com/', false, NULL, 0, 100) 之类的操作。但除非您想要前 100 个字节,否则您仍然需要进行一些后期处理。
请参阅http://php.net/manual/en/function.file-get-contents.php 了解更多信息。 (maxlen 除外,这些都是默认值。)
【解决方案3】:
这里是正则表达式和 PHP 的示例。
<?php
$f = file_get_contents ("http://www.example.com");
$f = preg_replace ("(\ |\r|\n|\t)", "", $f); // optional
$f = preg_replace ("/\s\s+/", " ", $f); // optional spaces
if (preg_match ("/<h1>(.*)<\/h1>/", $f, $res)) {
$data = $res [1];
}
echo $data;
?>