Snoopy(强大的PHP采集类) 详细介绍

回复 星标
更多
Snoopy(强大的PHP采集类) 详细介绍
.
.
.
.
.
.

Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单,可以用来开发一些采集程序和小偷程序,本文章详细介绍snoopy的使用教程。

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;

12.要求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用法示例:

下面是一个示例:

include "Snoopy.class.php";

$snoopy = new Snoopy;

$snoopy->proxy_host = "http://q.115.com/153332";

$snoopy->proxy_port = "80";

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";

$snoopy->referer = "http://q.115.com/153332";

$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://q.115.com/153332"))

{

echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";

}

else

echo "error fetching document: ".$snoopy->error."\n";

获取指定url内容:

$url ="http://q.115.com/153332";

include("snoopy.php");

$snoopy = new Snoopy;

$snoopy->fetch($url); //获取所有内容

echo $snoopy->results; //显示结果

//可选以下

$snoopy->fetchtext //获取文本内容(去掉html代码)

$snoopy->fetchlinks //获取链接

$snoopy->fetchform  //获取表单

表单提交:

$formvars["username"] = "admin";

$formvars["pwd"] = "admin";

$action ="http://q.115.com/153332";//</a>表单提交地址

$snoopy->submit($action,$formvars);//$formvars为提交的数组

echo $snoopy->results; //获取表单提交后的 返回的结果

//可选以下

$snoopy->submittext; //提交后只返回去除html的文本

$snoopy->submitlinks;//提交后只返回链接

伪装浏览器:

$formvars["username"] = "lanfengye";

$formvars["pwd"] = "lanfengye";

$action ="http://q.115.com/153332";

include "snoopy.php";

$snoopy = new Snoopy;

$snoopy->cookies["PHPSESSID"] = 'fc106b1918bd522cc863f36890e6fff7'; //伪装sessionid

$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器

$snoopy->referer ="http://q.115.com/153332"; //伪装来源页地址 http_referer

$snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息

$snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.101"; //伪装ip

$snoopy->submit($action,$formvars);

echo $snoopy->results;


Snoopy下载:http://sourceforge.net/projects/snoopy/files/

2015-06-17 22:45:02更新过
新窗口打开 关闭