snoopy中文手册.doc_第1页
snoopy中文手册.doc_第2页
snoopy中文手册.doc_第3页
snoopy中文手册.doc_第4页
snoopy中文手册.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Snoopy是一个php类,用来模拟浏览器的功能,可以获取网页内容,发送表单。Snoopy正确运行需要你的服务器的PHP版本在4以上,并且支持PCRE(Perl Compatible Regular Expressions),基本的LAMP服务都支持。一、Snoopy的一些特点:1.抓取网页的内容 fetch2.抓取网页的文本内容 (去除HTML标签) fetchtext3.抓取网页的链接,表单 fetchlinks fetchform4.支持代理主机5.支持基本的用户名/密码验证6.支持设置user_agent, referer(来路), cookies和header content(头文件)7.支持浏览器重定向,并能控制重定向深度8.能把网页中的链接扩展成高质量的url(默认)9.提交数据并且获取返回值10.支持跟踪HTML框架11.支持重定向的时候传递cookies,要求php4以上就可以了,由于本身是php一个类,无需扩支持,服务器不支持curl时候的最好选择。二、类方法: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四、以下是demoinclude Snoopy.class.php; $snoopy = new Snoopy;$snoopy-proxy_host = ; $snoopy-proxy_port = 8080;$snoopy-agent = (compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98); $snoopy-referer = /;$snoopy-cookiesSessionID = 238472834723489l; $snoopy-cookiesfavoriteColor = RED;$snoopy-rawheadersPragma = no-cache;$snoopy-maxredirs = 2; $snoopy-offsiteok = false; $snoopy-expandlinks = false;$snoopy-user = joe; $snoopy-pass = bloe;if($snoopy-fetchtext() echo .htmlspecialchars($snoopy-results). n; else echo error fetching document: .$snoopy-error.n;snoopy采集phpchina示例 submit($submit_url,$submit_vars); if ($snoopy-results) /获取连接地址 $snoopy-fetchlinks(/bbs); $url=array(); $url=$snoopy-results; /print_r($url); foreach ($url as $key=$value) /匹/bbs/forumdisplay.php?fid=156&sid=VfcqT地址即论坛板块地址 if (!preg_match(/(/bbs/forumdisplay.php?fid=)0-9*&sid=a-zA-Z6/i,$value) unset($url$key); /print_r($url); /获取到板块数组$url,循环访问,此处获取第一个模块第一页的数据 $i=0; foreach ($url as $key=$value) if ($i=1) /测试限制 break; else /访问该模块,提取帖子的连接地址,正式访问里需要提取帖子分页的数据,然后根据分页数据提取帖子数据 $snoopy=new Snoopy(); $snoopy-fetchlinks($value); $tie=array(); $tie$i=$snoopy-results; /print_r($tie); /转换数组 foreach ($tie$i as $key=$value) /匹配/bbs/viewthread.php?tid=68127&extra=page%3D1&page=1&sid=iBLZfK if (!preg_match(/(/bbs/viewthread.php?tid=)0-9*&extra=page%3D1&page=0-9*&sid=a-zA-Z6/i,$value) unset($tie$i$key); /print_r($tie$i); /归类数组,将同一个帖子不同页面的内容放一个数组里 $left=;/连接左边公用地址 $j=0; $page=array(); foreach ($tie$i as $key=$value) $left=substr($value,0,52); $m=0; foreach ($tie$i as $pkey=$pvalue) /重组数组 if (substr($pvalue,0,52)=$left) $page$j$m=$pvalue; $m+; $j+; /去除重复项开始 /$page=array_unique($page);只能用于一维数组 $paget0=$page0; $nums=count($page); for ($n=1;$n $value) /外围循环,针对一个帖子 if (is_array($value) foreach ($value as $k1=$v1) /页内循环,针对一个帖子的N页 $snoopy=new Snoopy(); $snoopy-fetch($v1); $temp=$snoopy-results; /读取标题 if (!preg_match_all(/ (.*) /i,$temp,$tt) echo no title; exit; else $title$u=$tt11; unset($tt); /读取内容 if (!preg_match_all(/ (.*) /i,$temp,$tt) print_r($tt); echo no content1; exit; else foreach ($tt1 as $c=$c2) $content$u.=$c2; else /直接取页内容 $snoopy=new Snoopy(); $snoopy-fetch($value); $temp=$snoopy-results; /读取标题 if (!preg_match_all(/ (.*) /i,$temp,$tt) echo no t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论