以下是一个使用Snoopy进行PHP采集的简单示例:,``
php,,``,在这段代码中,首先引入了Snoopy类,然后创建了一个Snoopy对象。调用fetch方法获取指定URL的内容。通过getHTML方法获取并打印网页的HTML内容。Snoopy 类

Snoopy是一个强大的PHP采集类,适用于需要抓取网页内容的场景,它支持多种功能,如抓取网页内容、文本内容、链接和表单等,它还支持代理主机、基本的用户名/密码验证、设置UserAgent、Referer、Cookies和头文件信息等。
主要特点
1、抓取网页的内容(fetch):通过指定URL地址来抓取网页内容,并将结果存储在$this>results中。
2、抓取网页的文本内容(fetchtext):类似于fetch()方法,但会去除HTML标签和其他无关数据,只返回网页中的纯文字内容。
3、抓取网页的链接和表单(fetchlinks 和 fetchform):分别用于抓取网页中的链接和表单内容,并自动补全相对链接为完整URL。
4、支持代理主机:可以设置代理主机和端口,以便通过代理服务器进行网络请求。
5、基本的身份验证:支持通过用户名和密码进行基本的身份验证。
6、自定义请求头:允许设置UserAgent、Referer、Cookies以及其他头文件信息。

7、重定向控制:支持浏览器重定向,并能控制重定向深度。
8、提交数据:可以通过submit()方法向指定的URL发送表单数据,并获取返回值。
使用实例代码
示例1:获取指定URL的内容
include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy>fetch("http://www.example.com"); // 获取所有内容
echo $snoopy>results; // 显示结果
示例2:抓取网页文本内容
include "Snoopy.class.php";
$snoopy = new Snoopy;
if ($snoopy>fetchtext("http://www.example.com")) {
echo htmlspecialchars($snoopy>results); // 显示抓取到的文本内容
} else {
echo "error fetching document: " . $snoopy>error;
}
示例3:获取网页中的链接
include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy>fetchlinks("http://www.example.com"); // 获取所有链接
$links = $snoopy>results;
foreach ($links as $link) {
echo $link . "<br>"; // 输出每个链接
}
示例4:提交表单数据
include "Snoopy.class.php";
$snoopy = new Snoopy;
$formvars["username"] = "admin";
$formvars["pwd"] = "admin";
$action = "http://www.example.com/login"; // 表单提交地址
if ($snoopy>submit($action, $formvars)) {
echo htmlspecialchars($snoopy>results); // 显示登录后的内容
} else {
echo "error submitting form: " . $snoopy>error;
}
示例5:下载图片

include "Snoopy.class.php";
$snoopy = new Snoopy;
$sourceURL = "http://www.example.com";
$snoopy>fetchlinks($sourceURL); // 获取所有链接
$a = $snoopy>results;
$re = "/\d+.html$/"; // 过滤获取指定的文件地址请求
foreach ($a as $tmp) {
if (preg_match($re, $tmp)) {
getImgURL($tmp);
}
}
function getImgURL($siteName) {
$snoopy = new Snoopy();
$snoopy>fetch($siteName);
$fileContent = $snoopy>results;
$reTag = "//i"; // 匹配图片的正则表达式
if (preg_match_all($reTag, $fileContent, $matchResult)) {
for ($i = 0, $len = count($matchResult[1]); $i < $len; $i++) {
saveImgURL($matchResult[1][$i], $matchResult[2][$i]);
}
}
}
function saveImgURL($name, $suffix) {
$url = $name . "." . $suffix;
echo "请求的图片地址:" . $url . "<br>";
$imgSavePath = "E:/xxx/style/images/";
$imgId = preg_replace("/^.+/(\d+)$/", "\1", $name);
if ($suffix == "gif") {
$imgSavePath .= "emotion";
} else {
$imgSavePath .= "topic";
}
$imgSavePath .= ("/" . $imgId . "." . $suffix);
if (is_file($imgSavePath)) {
unlink($imgSavePath);
echo "文件" . $imgSavePath . "已存在,将被删除<br>";
}
$imgFile = file_get_contents($url);
$flag = file_put_contents($imgSavePath, $imgFile);
if ($flag) {
echo "文件" . $imgSavePath . "保存成功<br>";
}
}
FAQs
问题1:Snoopy类如何设置代理?
答:你可以通过设置Snoopy对象的proxy_host和proxy_port属性来配置代理。
include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy>proxy_host = "http://proxy.example.com"; $snoopy>proxy_port = "8080";
问题2:如何限制Snoopy的重定向次数?
答:你可以通过设置Snoopy对象的maxredirs属性来限制最大重定向次数,要禁止重定向,可以将maxredirs设置为0:
include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy>maxredirs = 0; // 禁止重定向