/** * @name Snoopy手册中文版 * @author 毛毛虫 wangchong1985@gmail.com * @version Snoopy - the PHP net client v1.2.2 * @link http://www.wangchong.org * @since 2008-04-27 */ 名称: Snoopy - the PHP net client v1.2.2 概要: include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy->fetchtext("http://www.php.net/"); print $snoopy->results; $snoopy->fetchlinks("http://www.phpbuilder.com/"); print $snoopy->results; $submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html"; $submit_vars["q"] = "amiga"; $submit_vars["submit"] = "Search!"; $submit_vars["searchhost"] = "Altavista"; $snoopy->submit($submit_url,$submit_vars); print $snoopy->results; $snoopy->maxframes=5; $snoopy->fetch("http://www.ispi.net/"); echo "
\n";
	echo htmlentities($snoopy->results[0]); 
	echo htmlentities($snoopy->results[1]); 
	echo htmlentities($snoopy->results[2]); 
	echo "
\n"; $snoopy->fetchform("http://www.altavista.com"); print $snoopy->results; 描述: Snoopy是什么? Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务。 Snoopy的一些特点: * 方便抓取网页的内容 * 方便抓取网页的文本内容 (去除HTML标签) * 方便抓取网页的链接 * 支持代理主机 * 支持基本的用户名/密码验证 * 支持设置 user_agent, referer(来路), cookies 和 header content(头文件) * 支持浏览器转向,并能控制转向深度 * 能把网页中的链接扩展成高质量的url(默认) * 方便提交数据并且获取返回值 * 支持跟踪HTML框架(v0.92增加) * 支持再转向的时候传递cookies (v0.92增加) 要求: Snoopy requires PHP with PCRE (Perl Compatible Regular Expressions), which should be PHP 3.0.9 and up. For read timeout support, it requires PHP 4 Beta 4 or later. Snoopy was developed and tested with PHP 3.0.12. 类方法: fetch($URI) ----------- 这是为了抓取网页的内容而使用的方法。 $URI参数是被抓取网页的URL地址。 抓取的结果被存储在 $this->results 中。 如果你正在抓取的是一个框架,Snoopy将会将每个框架追踪后存入数组中,然后存入 $this->results。 fetchtext($URI) --------------- 本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中的文字内容。 fetchform($URI) --------------- 本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中表单内容(form)。 fetchlinks($URI) ---------------- 本方法类似于fetch(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。 默认情况下,相对链接将自动补全,转换成完整的URL。 submit($URI,$formvars) ---------------------- 本方法向$URL指定的链接地址发送确认表单。$formvars是一个存储表单参数的数组。 submittext($URI,$formvars) -------------------------- 本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回登陆后网页中的文字内容。 submitlinks($URI) ---------------- 本方法类似于submit(),唯一不同的就是本方法会去除HTML标签和其他的无关数据,只返回网页中链接(link)。 默认情况下,相对链接将自动补全,转换成完整的URL。 类属性: (缺省值在括号里) $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 例子: 例子: 抓取一个页面并显示他的头信息和页面内容 (去掉HTML标签的页面): include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy->user = "joe"; $snoopy->pass = "bloe"; if($snoopy->fetch("http://www.slashdot.org/")) { echo "response code: ".$snoopy->response_code."
\n"; while(list($key,$val) = each($snoopy->headers)) echo $key.": ".$val."
\n"; echo "

\n"; echo "

".htmlspecialchars($snoopy->results)."
\n"; } else echo "error fetching document: ".$snoopy->error."\n"; 例子: 提交一个表单并且打印出头信息和去掉HTML标签的页面: include "Snoopy.class.php"; $snoopy = new Snoopy; $submit_url = "http://lnk.ispi.net/texis/scripts/msearch/netsearch.html"; $submit_vars["q"] = "amiga"; $submit_vars["submit"] = "Search!"; $submit_vars["searchhost"] = "Altavista"; if($snoopy->submit($submit_url,$submit_vars)) { while(list($key,$val) = each($snoopy->headers)) echo $key.": ".$val."
\n"; echo "

\n"; echo "

".htmlspecialchars($snoopy->results)."
\n"; } else echo "error fetching document: ".$snoopy->error."\n"; 例子: 展示所有属性的功能: include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy->proxy_host = "my.proxy.host"; $snoopy->proxy_port = "8080"; $snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; $snoopy->referer = "http://www.microsnot.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.phpbuilder.com")) { while(list($key,$val) = each($snoopy->headers)) echo $key.": ".$val."
\n"; echo "

\n"; echo "

".htmlspecialchars($snoopy->results)."
\n"; } else echo "error fetching document: ".$snoopy->error."\n"; 例子: 抓取框架内容并展示结果: include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy->maxframes = 5; if($snoopy->fetch("http://www.ispi.net/")) { echo "
".htmlspecialchars($snoopy->results[0])."
\n"; echo "
".htmlspecialchars($snoopy->results[1])."
\n"; echo "
".htmlspecialchars($snoopy->results[2])."
\n"; } else echo "error fetching document: ".$snoopy->error."\n"; COPYRIGHT: Copyright(c) 1999,2000 ispi. All rights reserved. This software is released under the GNU General Public License. Please read the disclaimer at the top of the Snoopy.class.php file. THANKS: Special Thanks to: Peter Sorger help fixing a redirect bug Andrei Zmievski implementing time out functionality Patric Sandelin help with fetchform debugging Carmelo misc bug fixes with frames