snoopy php采集类使用说明详解
snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,提交表单。
snoopy正确运行需要你的服务器的php版本在4以上,并且支持pcre(perl compatible regular expressions),基本的lamp服务都支持。
一、snoopy采集类的一些特点:1.抓取网页的内容 fetch
2.抓取网页的文本内容 (去除html标签) fetchtext
3.抓取网页的链接,表单 fetchlinks fetchform
4.支持代理主机
5.支持基本的用户名/密码验证
6.支持设置user_agent, referer(来路), cookies和header content(头文件)
7.支持浏览器重定向,并能控制重定向深度
8.能把网页中的链接扩展成高质量的url(默认)
9.提交数据并且获取返回值
10.支持跟踪html框架
11.支持重定向的时候传递cookies,要求php4以上就可以了,由于本身是php一个类,无需扩支持,服务器不支持curl时候的最好选择。
二、snoopy采集类方法:1、fetch($uri)
这是为了抓取网页的内容而使用的方法。$uri参数是被抓取网页的url地址。抓取的结果被存储在 $this->results 中。如果你正在抓取的是一个框架,snoopy将会将每个框架追踪后存入数组中,然后存入
$this->results。
2、fetchtext($uri)
本方法类似于fetch(),唯一不同的就是本方法会去除html标签和其他的无关数据,只返回网页中的文字内容。
3、fetchform($uri)
本方法类似于fetch(),唯一不同的就是本方法会去除html标签和其他的无关数据,只返回网页中表单内容(form)。
4、fetchlinks($uri)
本方法类似于fetch(),唯一不同的就是本方法会去除html标签和其他的无关数据,只返回网页中链接(link)。默认情况下,相对链接将自动补全,转换成完整的url。
5、submit($uri,$formvars)
本方法向$url指定的链接地址发送确认表单。$formvars是一个存储表单参数的数组。
6、submittext($uri,$formvars)
本方法类似于submit(),唯一不同的就是本方法会去除html标签和其他的无关数据,只返回登陆后网页中的文字内容。
7、submitlinks($uri)
本方法类似于submit(),唯一不同的就是本方法会去除html标签和其他的无关数据,只返回网页中链接(link)。
默认情况下,相对链接将自动补全,转换成完整的url。
三、snoopy采集类属性: (缺省值在括号里)$host 连接的主机
$port 连接的端口
$proxy_host 使用的代理主机,如果有的话
$proxy_port 使用的代理主机端口,如果有的话
$agent 用户代理伪装 (snoopy v0.1)
$referer 来路信息,如果有的话
$cookies cookies, 如果有的话
$rawheaders 其他的头信息, 如果有的话
$maxredirs 最大重定向次数, 0=不允许 (5)
$offsiteok whether or not to allow redirects off-site. (true)
$expandlinks 是否将链接都补全为完整地址 (true)
$user 认证用户名, 如果有的话
$pass 认证用户名, 如果有的话
$accept http 接受类型 (image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*)
$error 哪里报错, 如果有的话
$response_code 从服务器返回的响应代码
$headers 从服务器返回的头信息
$maxlength 最长返回数据长度
$read_timeout 读取操作超时 (requires php 4 beta 4+)
设置为0为没有超时
$timed_out 如果一次读取操作超时了,本属性返回 true (requires php 4 beta 4+)
$maxframes 允许追踪的框架最大数量
$status 抓取的http的状态
$temp_dir 网页服务器能够写入的临时文件目录 (/tmp)
$curl_path curl binary 的目录, 如果没有curl binary就设置为 false
四、snoopy采集类项目地址:http://sourceforge.net/projects/snoopy/
五、snoopy采集类实例代码 1、snoopy采集类基础实例代码
include snoopy.class.php;
$snoopy = new snoopy;
$snoopy->proxy_host = www.baidu.com;
$snoopy->proxy_port = 8080;
$snoopy->agent = (compatible; msie 4.01; msn 2.5; aol 4.0; windows 98);
$snoopy->referer = http://www.baidu.com/;
$snoopy->cookies[sessionid] = 238472834723489l;
$snoopy->cookies[favoritecolor] = red;
$snoopy->rawheaders[pragma] = no-cache;
$snoopy->maxredirs = 2;
$snoopy->offsiteok = false;
$snoopy->expandlinks = false;
$snoopy->user = joe;
$snoopy->pass = bloe;
if($snoopy->fetchtext(http://www.baidu.com)) {
echo .htmlspecialchars($snoopy->results).
n;
}
else
echo error fetching document: .$snoopy->error.n;
2、 获取指定url内容
$url='http://www.baidu.com';
include('snoopy.php');
$snoopy=new snoopy;
$snoopy->fetch($url);//获取所有内容
echo $snoopy->results;//显示结果
$snoopy->fetchtext //获取文本内容(去掉html代码)
$snoopy->fetchlinks //获取页面所有链接
$snoopy->fetchform //获取页面表单信息
3 、提交表单
include 'snoopy.php';
$snoopy=new snoopy;
$formvars['username']='admin';
$formvars['pwd']='admin';
$action='http://www.baidu.com';//表单提交地址
$snoopy->submit($action,$formvars);//$formvars为提交的数组
echo $snoopy->results;//获取表单提交后的 返回的结果
$snoopy->submittext;//提交后只返回去除html的文本
$snoopy->submitlinks;//提交后只返回链接
4、 使用snoopy来伪装
$formvars['username']='admin';
$formvars['pwd']='admin';
$action='http://www.baidu.com';
include 'snoopy.php';
$snoopy=new snoopy;
$snoopy->cookies['phpsessid']='fc206b1918bd522cc863p36890e6notef7';//伪装sessionid
$snoopy->agent='(compatible;msie 4.01;msn 2.5;aol 4.0;windows 98)';//伪装浏览器
$snoopy->referer='http://www.baidu.com';//伪装来源页地址 http_referer
$snoopy->rawheaders['pragma']='no-cache';//cache 的http头信息
$snoopy->rawheaders['x_forwarded_for']='127.0.0.1';//伪装ip
$snoopy->submit($action,$formvars);
echo $snoopy->results;