PHP Snoopy类-抓取采集
Snoopy其实就是一个PHP类-抓取采集类,它能完成获取网页内容和发送表单的任务。 抓取网页的内容(fetch) submitlinks($URI) $host 连接的主机
转载请遵循 协议许可要求:PHP4以上
本身是php一个类,无需扩支持,不支持curl的服务器可以使用。
主要功能
抓取网页的文本内容 (去除HTML标签) (fetchtext)
抓取网页的链接,表单 (fetchlinks fetchform)
支持代理主机
支持基本的用户名/密码验证
支持设置 user_agent, referer(来路), cookies 和 header content(头文件)
支持浏览器重定向,并能控制重定向深度
能把网页中的链接扩展成高质量的url(默认)
提交数据并且获取返回值
支持跟踪HTML框架
支持重定向的时候传递cookies接口或方法
fetch($URI)
抓取网页的内容,$URI 是要抓取网页的网址,抓取过来结果存储到 $this->results。如果你抓取的是框架,这每个 frame 都会被抓取,结果会保存到一个数组中。fetchtext($URI)
和 fetch() 是差不多的,只是它的结果是文本,除去 HTML 标签和其他无关信息。fetchform($URI)
只返回抓取的网页上 form 元素。fetchlinks($URI)
只返回抓取的网页上的链接,默认返回的链接都是含有域名的链接。submit($URI,$formvars)
提交一个表单到指定的 $URI。$formvars 是要传递的 form 变量数组。submittext($URI,$formvars)
这个方法和 submit() 基本一致,但是它返回的是文本,除去了 html 标签和其他无关数据。
返回的是链接。Snoopy采集类属性(Snoopy.class.php)
$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示例:模拟提交表单返回表的数据
<?php
include "snoopy.class.php";
$snoopy = new Snoopy;
//表单提交模拟
$formvars["txtStudentNo"] = "学号";
$formvars["txtStudentName"] = "姓名";
$formvars["__EVENTTARGET"] = "";
$formvars["__EVENTARGUMENT"] = "";
$formvars["__VIEWSTATE"] = "/wEPDwULLTEyODE2MTMzNjUPZBYCAgMPZBYGAhYPEGRkFgBkAhgPPCsAEQBkAhoPPCsAEQEBEBYAFgAWAGQYAgUHZ3ZTY29yZQ9nZAUIZ3ZDcmVkaXQPZ2Q0vZ9kcrUU+TZE61Bo6Cj1/MAPlBQAKHwTNWddmQ6OlA==";
$formvars["__EVENTVALIDATION"] = "/wEWBgLlvo2iCALOj4fxBwL9p/noCwLdkpmPAQKLk6mvAgKXt+TzAXM3720UDhWcPUtOLX8Il0quPlehyyQNYIBW67NbdoWi";
$formvars["btnOK"] = "确定";
//抓取地址
$action = "学院成绩查询网址";
$snoopy->cookies["PHPSESSID"] = 'fc106b1918bd522cc863f36890e6fff7'; //伪装sessionid
$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)"; //伪装浏览器
$snoopy->referer = "学院成绩查询网址"; //伪装来源页地址 http_referer
$snoopy->rawheaders["Pragma"] = "no-cache"; //cache 的http头信息
$snoopy->rawheaders["X_FORWARDED_FOR"] = "127.0.0.1"; //伪装ip
$snoopy->submit($action,$formvars);
$data=$snoopy->results;
//单独取出数据
preg_match_all('#<td>(.+?)</td>#',$data,$m);
// print_r($m);//打印出所有
?>
<?
if(isset($m[0][1]))
{
?>
<table width="50%" border="1" cellspacing="0" cellpadding="0">
<?
for($i=0;$i<32;$i++)
{
?>
<tr>
<?=$m[0][13+12*$i]?>
<?=$m[0][16+12*$i]?>
<?=$m[0][17+12*$i]?>
</tr>
<?
}
?>
</table>
<?
}
else
echo "该成绩查询只适用本校学生";
?>
本文所有内容严禁任何形式的盗用
本文作者:Amos
本文链接:https://amoshk.top/php_snoopy/