PHP 抓取和分析

发表于:2007-05-25来源:作者:点击数: 标签:分析php抓取文件一个
抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开 始吧! 首先,我首必须决定我们将抓取的URL地址。可以通过在脚本中设定或通过$QUERY_STRING传递。为了简 单起见,让我们将变量直接设在脚本中。 ? $url='http:

  抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步一步地去实现它。让我们开 
始吧! 

  首先,我首必须决定我们将抓取的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用作逐行分析。

原文转自:http://www.ltesting.net