curl()、file_get_contents()、snoopy.class.php这三个远程页面抓取或采集中用到的工具,他们功能至关,到底有什么优缺点呢,下面逐一介绍: php
snoopy.class.php 浏览器
snoopy 是用 fsockopen 自开发的一个类,效率比较高且不须要服务器特定配置支持,在普通虚拟主机中便可使用,可是常常出问题。官方网址:http://sourceforge.net/projects
Snoopy是一个php类,用来模拟浏览器的功能,能够获取网页内容,发送表单。
Snoopy的特色:
一、抓取网页的内容 fetch
二、抓取网页的文本内容 (去除HTML标签) fetchtext
三、抓取网页的连接,表单 fetchlinks fetchform
四、支持代理主机
五、支持基本的用户名/密码验证
六、支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
七、支持浏览器重定向,并能控制重定向深度
八、能把网页中的连接扩展成高质量的url(默认)
九、提交数据而且获取返回值
十、支持跟踪HTML框架
十一、支持重定向的时候传递cookies
要求php4以上就能够了,因为自己是php一个类,无需扩支持,服务器不支持curl时候的最好选择。 服务器
file_get_contents() cookie
file_get_contents 是 fsockopen 功能的简单打包,效率稍低些,可是抓取成功率很高,因此在 snoopy 出问题的时候我通常那他来。5.0.0 添加了对 context 的支持,有了context,他也能够发送 header 信息,自定义用户 agent, referer, cookies 都不在话下。5.1.0 添加了 offset 和 maxlen 参数,能够只读文件的一部份内容。 多线程
curl() 框架
功能最强大,几乎能够模拟浏览器的各个方面,几乎能够以假乱真。效率也很高,支持多线程,不过须要开启下 curl 扩展。 curl
cURL是一个利用URL语法规定来传输文件和数据的工具,支持不少协议,如HTTP、FTP、TELNET等。PHP也支持cURL库,咱们经常用来远程页面抓取和采集。
一些CMS会使用curl函数,这就须要在服务器开启CURL扩展,下面介绍具体的方法:
一、将PHP的ext目录下的三个文件:php_curl.dll、libeay32.dll和ssleay32.dll复制到系统system32目录中。
二、将php.ini中的
;extension=php_curl.dll 前面的分号去掉
三、重启IIS或Apache
四、测试代码
<?php
//初始化
$ch = curl_init();
//设置选项,包括URL
curl_setopt($ch,CURLOPT_URL,"www.abc.net");
curl_setopt($ch,CURLOPT_HEADER,1);
curl_exec($ch);
curl_close($ch);
?> 函数