抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开
始吧!
首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简
单起见,让我们将变量直接设在脚本中。
<?
$url = 'http://www.
php.net';
?>
第二步,我们抓取指定文件,并且通过file()函数将它存在一个数组里。
<?
$url = 'http://www.
php.net';
$lines_array = file($url);
?>
好了,现在在数组里已经有了文件了。但是,我们想分析的文本可能不全在一行里面。为了解决这个文
件,我们可以简单地将数组$lines_array转化成一个字符串。我们可以使用implode(x,y)函数来实现它。如
果在后面你想用explode(将字符串变量数组),将x设成"|"或"!"或其它类似的分隔符可能会更好。但是出于
我们的目的,最好将x设成空格。y是另一个必要的参数,因为它是你想用implode()处理的数组。
<?
$url = 'http://www.
php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
?>
现在,抓取工作就做完了,下面该进行分析了。出于这个例子的目的,我们想得到在<head>到</head>
之间的所有东西。为了分析出字符串,我们还需要叫做正规表达式的东西。
<?
$url = 'http://www.
php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
eregi("<head>(.*)</head>", $lines_string, $head);
?>
让我们看一下代码。正如你所见,eregi()函数按下面的格式执行:
eregi("<head>(.*)</head>", $lines_string, $head);
"(.*)"表示所有东西,可以解释为,"分析在<head>和</head>间的所以东西"。$lines_string是我们正
在分析的字符串,$head是分析后的结果存放的数组。
最后,我们可以输数据。因为仅在<head>和</head>间存在一个实例,我们可以安全的假设数组中仅存
在着一个元素,而且就是我们想要的。让我们把它打印出来吧。
<?
$url = 'http://www.
php.net';
$lines_array = file($url);
$lines_string = implode('', $lines_array);
eregi("<head>(.*)</head>", $lines_string, $head);
echo $head[0];
?>
这就是全部的代码了。
| leaper 回复于:2003-06-09 10:23:17 |
不错,可以用来作天气预报了@@@
|
| feming 回复于:2003-06-09 11:58:28 |
[quote:dfeb37d0a3="leaper"]不错,可以用来作天气预报了@@@[/quote:dfeb37d0a3]
倒
|
| redfox 回复于:2003-06-09 13:23:43 |
就是速度慢阿。
|
| DQLA 回复于:2003-06-19 05:12:49 |
哦可,下载
|
| toplee 回复于:2003-07-03 12:35:21 |
这些东西可以支持ftp,https等协议,还支持代理,我用它搞了个自动下载mp3的程序,一天可以从各个网站上去抓取mp3,还有歌词和图片都能搞定。。。。
一个字,爽
|
| MaxBSD 回复于:2003-07-03 17:18:26 |
[quote:02802f4577="toplee"]这些东西可以支持ftp,https等协议,还支持代理,我用它搞了个自动下载mp3的程序,一天可以从各个网站上去抓取mp3,还有歌词和图片都能搞定。。。。
一个字,爽[/quote:02802f4577]
给个代码看看吧。
|
| redfox 回复于:2003-07-03 22:41:06 |
小心ip被封,我只用来拉邮件地址 :lol:
|
| dujing 回复于:2005-02-17 10:20:22 |
小偷程序都是这样做的。PHP确实是太强大了。
|
| HonestQiao 回复于:2005-02-18 11:55:36 |
哈哈,做这些工作,我一般是使用shell脚本来做的,php cml也可以的 如果托给服务器的php脚本来做,效率太差
|
| dujing 回复于:2005-02-18 12:15:20 |
我一般是使用shell脚本来做的 ============ 愿闻其祥。
|
| HonestQiao 回复于:2005-02-18 12:37:01 |
[quote:de64221843="dujing"]我一般是使用shell脚本来做的 ============ 愿闻其祥。[/quote:de64221843] shell的正则表达式的能力,是无与伦比的,做这些文本处理的工作,完全是属于基本应用。 可以使用bash csh perl tcl等等
|
| dujing 回复于:2005-02-18 13:28:26 |
shell可否用来处理报社的.ps大样文件?.ps大样文件一般是报纸的一个整版,拥有数篇文章,可否用shell分解出一篇篇文章来?
|
| tmdxy 回复于:2005-08-18 02:32:50 |
fsockopen还可以发送cookie,curl还可以发送来源。。呵呵 其实,偷偷天气预报之类的,建议js+xmlhttp,让客户端操作。。。
|
| waituy 回复于:2005-08-18 13:03:05 |
[quote:cba4eff4aa="tmdxy"]fsockopen还可以发送cookie,curl还可以发送来源。。呵呵 其实,偷偷天气预报之类的,建议js+xmlhttp,让客户端操作。。。[/quote:cba4eff4aa]
看来还得学习很多东西啊..
|
| 牧熊人 回复于:2005-08-18 13:07:21 |
$url = 'http://www.php.net'; $lines_array = file($url); $lines_string = implode('', $lines_array);
这三行可以用
file_get_contents("http://www.php.net");
代替。除非你想留着$lines_array用作逐行分析。
|