本教程用php实现像asp里xmlhttp的功能一样,抓取远程网页内容. php程序员站
php有好多函数可以打开远程url读取内容.但采集推荐大家用fsockopen函数, php程序员站
我们先来看一下fsockopen函数的语法: phperz.com
以下为引用的内容: resource fsockopen ( string target [, int port [, int &errno [, string &errstr [, float timeout]]]] |
phperz~com
fsockopen 连接远程主机socket端口成功后会返回一个文件句柄,就像fopen打开文件一样.然后用fgets和fputs来实现收发. www.phperz.com
target : 为远程主机的ip地址或域名.比如.192.168.1.2或www.phperz.com php程序员之家
port : 为远程主机的端口, php程序员站
提供可选参数errstr时,当连接远程主机时间超过timeout时,报错errstr phperz.com
下面这个例子就是用fsockopen函数来抓取远程网页内容的一个简单例子: www.phperz.com
以下为引用的内容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>fsockopen抓取远程网页示例--www.phperz.com</title> </head> <body> <?php $url="www.phperz.com"; www.phperz.com"; //目标主机 www~phperz~com $getstr="/"; //$getstr 为域名后的参数.比如你要抓取的地址为 www.phperz.com/test.php?id=123 ,那么此处就是 /test.php?id=123 //如果没参数,那么就为 " / " $fp=@fsockopen($url,80,$errno,$errstr,10); if (!$fp){ echo "$errstr ($errno)<br>"; //如果打开失败,则把错误信息输出. } else { fputs($fp,"GET ".$getstr." HTTP/1.1\r\nHost:www.phperz.com\r\nConnection: Close\r\n\r\n"); //正确打开,发送请求头信息 //关于http头信息你可以参考本站的另一篇文件 HTTP协议头信息详解 phperz.com while (!feof($fp)){ $data.= fgets($fp,1024); //fgets为 逐行读取,后面的1024为一行最多返回多少字节的数据,可以不指定默认为1K,也就是1024字节. } fclose($fp); } echo $data; www~phperz~com
?> </body> </html> www~phperz~com
|
php程序员站
这个例子是用fsockopen实现socket连接, 来读取远程网页内容. phperz.com
你也可以用类似file或file_get_contents 的函数来把整个文件载入到数组中或变量中. phperz~com
当然一次载入,要比逐行读取挂起的可能性要大. phperz.com
抓取回来的数据,你也可以加以分析,从里面提取你想得到的数据,在此就不写了. phperz.com
php程序员之家
|