`
kaindy7633
  • 浏览: 79986 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
社区版块
存档分类
最新评论

snoopy采集phpchina示例

    博客分类:
  • PHP
阅读更多

snoopy采集phpchina示例
<?php
//采集phpchina

set_time_limit(0);

require_once("Snoopy.class.php");

$snoopy=new Snoopy();

//登陆论坛

$submit_url = "http://www.phpchina.com/bbs/logging.php?action=lo gin";

$submit_vars["loginmode"] = "normal";

$submit_vars["styleid"] = "1";

$submit_vars["cookietime"] = "";

$submit_vars["loginfield"] = "username";

$submit_vars["username"] = "***"; //你的用户名

$submit_vars["password"] = "*****"; //你的密码

$submit_vars["questionid"] = "0";

$submit_vars["answer"] = "";

$submit_vars["loginsubmit"] = "提交";

$snoopy->submit($submit_url,$submit_vars);

$snoopy->fetchlinks("http://www.phpchina.com/bbs");

$url=array();

$url=$snoopy->results;

//print_r($url);

foreach ($url as $key=>$value)

{

//匹配http://www.phpchina.com/bbs/forumdisplay.php?fid=1 56&sid=VfcqTR地址即论坛板块地址

if (!preg_match("/^(http:\/\/www\.phpchina\.com\/bbs\ /forumdisplay\.php\?fid=)[0-9]*&sid=[a-zA-Z]{6}/i", $value))

{

unset($url[$key]);

}

}

//print_r($url);

//获取到板块数组$url,循环访问,此处获取第一个模块第一页的数据

$i=0;

foreach ($url as $key=>$value)

{

if ($i>=1)

{

//测试限制

break;

{

//匹配http://www.phpchina.com/bbs/viewthread.php?tid=681 27&extra=page%3D1&page=1&sid=iBLZfK

if (!preg_match("/^(http:\/\/www\.phpchina\.com\/bbs\ /viewthread\.php\?tid=)[0-9]*&extra=page\%3D1&a mp;page=[0-9]*&sid=[a-zA-Z]{6}/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)

{

for ($n=1;$n<$nums;$n++)

{

$paget[$n]=array_diff($page[$n],$page[$n-1]);

}

//去除多维数组重复值结束

//去除数组空值

unset($page);

$page=array();//重新定义page数组

$page=array_filter($paget);

//print_r($page);

$u=0;

$title=array();

$content=array();

$temp='';

$tt=array();

foreach ($page as $key=>$value)

{

//外围循环,针对一个帖子

if (is_array($value))

{

foreach ($value as $k1=>$v1)

{

//页内循环,针对一个帖子的N页

$snoopy=new Snoopy();

$snoopy->fetch($v1);

$temp=$snoopy->results;

//读取标题

if (!preg_match_all("/<h2>(.*)<\/h2>/i",$temp,$tt))

{

echo "no title";

exit;

}

else

{

$title[$u]=$tt[1][1];

}

unset($tt);

//读取内容

if (!preg_match_all("/<div id=\"postmessage_[0-9]{1,8}\" class=\"t_msgfont\">(.*)<\/div>/i",$temp,$tt))

{

print_r($tt);

echo "no content1";

exit;

}

else

{

foreach ($tt[1] as $c=>$c2)

{

$content[$u].=$c2;

}

}

}

}

else

{

//直接取页内容

$snoopy=new Snoopy();

$snoopy->fetch($value);

$temp=$snoopy->results;

//读取标题

if (!preg_match_all("/<h2>(.*)<\/h2>/i",$temp,$tt))

{

echo "no title";

exit;

}

else

{

$title[$u]=$tt[1][1];

}

unset($tt);

//读取内容

if (!preg_match_all("/<div id=\"postmessage_[0-9]*\" class=\"t_msgfont\">(.*)<\/div>/i",$temp,$tt))

{

echo "no content2";

exit;

}

else

{

foreach ($tt[1] as $c=>$c2)

{

$content[$u].=$c2;

}

}

}

<?php

//采集phpchina

set_time_limit(0);

require_once("Snoopy.class.php");

$snoopy=new Snoopy();

//登陆论坛

$submit_url = "http://www.phpchina.com/bbs/logging.php?action=lo gin";

$submit_vars["loginmode"] = "normal";

$submit_vars["styleid"] = "1";

$submit_vars["cookietime"] = "";

$submit_vars["loginfield"] = "username";

$submit_vars["username"] = "***"; //你的用户名

$submit_vars["password"] = "*****"; //你的密码

$submit_vars["questionid"] = "0";

$submit_vars["answer"] = "";

$submit_vars["loginsubmit"] = "提交";

$snoopy->submit($submit_url,$submit_vars);

if ($snoopy->results)

{

//获取连接地址

$snoopy->fetchlinks("http://www.phpchina.com/bbs");

$url=array();

$url=$snoopy->results;

//print_r($url);

foreach ($url as $key=>$value)

{

//匹配http://www.phpchina.com/bbs/forumdisplay.php?fid=1 56&sid=VfcqTR地址即论坛板块地址

if (!preg_match("/^(http:\/\/www\.phpchina\.com\/bbs\ /forumdisplay\.php\?fid=)[0-9]*&sid=[a-zA-Z]{6}/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)

{

//匹配http://www.phpchina.com/bbs/viewthread.php?tid=681 27&extra=page%3D1&page=1&sid=iBLZfK

if (!preg_match("/^(http:\/\/www\.phpchina\.com\/bbs\ /viewthread\.php\?tid=)[0-9]*&extra=page\%3D1&a mp;page=[0-9]*&sid=[a-zA-Z]{6}/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);只能用于一维数组

$paget[0]=$page[0];

$nums=count($page);

for ($n=1;$n<$nums;$n++)

{

$paget[$n]=array_diff($page[$n],$page[$n-1]);

}

//去除多维数组重复值结束

//去除数组空值

unset($page);

$page=array();//重新定义page数组

$page=array_filter($paget);

//print_r($page);

$u=0;

$title=array();

$content=array();

$temp='';

$tt=array();

foreach ($page as $key=>$value)

{

//外围循环,针对一个帖子

if (is_array($value))

{

foreach ($value as $k1=>$v1)

{

//页内循环,针对一个帖子的N页

$snoopy=new Snoopy();

$snoopy->fetch($v1);

$temp=$snoopy->results;

//读取标题

if (!preg_match_all("/<h2>(.*)<\/h2>/i",$temp,$tt))

{

echo "no title";

exit;

}

else

{

$title[$u]=$tt[1][1];

}

unset($tt);

//读取内容

if (!preg_match_all("/<div id=\"postmessage_[0-9]{1,8}\" class=\"t_msgfont\">(.*)<\/div>/i",$temp,$tt))

{

print_r($tt);

echo "no content1";

exit;

}

else

{

foreach ($tt[1] as $c=>$c2)

{

$content[$u].=$c2;

}

}

}

}

else

{

//直接取页内容

$snoopy=new Snoopy();

$snoopy->fetch($value);

$temp=$snoopy->results;

//读取标题

if (!preg_match_all("/<h2>(.*)<\/h2>/i",$temp,$tt))

{

echo "no title";

exit;

}

else

{

$title[$u]=$tt[1][1];

}

unset($tt);

//读取内容

if (!preg_match_all("/<div id=\"postmessage_[0-9]*\" class=\"t_msgfont\">(.*)<\/div>/i",$temp,$tt))

{

echo "no content2";

exit;

}

else

{

foreach ($tt[1] as $c=>$c2)

{

$content[$u].=$c2;

}

}

}

$u++;

}

print_r($content);

}

$i++;

}

}

else

{

echo "login failed";

exit;

}

?>

分享到:
评论

相关推荐

    snoopy采集类

    Snoopy的最新版本为1.2.4,包含在名为"Snoopy-1.2.4"的压缩包文件中。 Snoopy的工作原理是通过发送HTTP请求来模仿浏览器的行为。它可以设置请求方法(GET或POST),添加cookies,设置HTTP头,甚至可以处理重定向。...

    PHP采集器Snoopy详解

    标题 "PHP采集器Snoopy详解" 描述的是一个用于PHP的网络数据抓取工具,名为Snoopy。Snoopy作为一个PHP类,其主要功能是模拟浏览器的行为,包括获取网页内容、处理表单提交等。它需要PHP版本在4以上,并依赖于PCRE...

    Snoopy.class.php——登陆采集利器

    使用Snoopy来模拟登陆,然后采集登陆后的页面非常管用! Snoopy的特点: 1、抓取网页的内容 fetch 2、抓取网页的文本内容 (去除HTML标签) fetchtext 3、抓取网页的链接,表单 fetchlinks fetchform 4、支持代理主机 ...

    Snoopy

    使用这个版本前,开发者通常需要将其解压并按照提供的文档或示例代码进行安装和配置。 总的来说,Snoopy是一个强大的PHP HTTP客户端工具,它简化了从Web获取数据的过程,对于PHP开发者来说是一个非常有价值的工具。...

    snoopy-2.0

    《Snoopy-2.0:网页数据采集的利器》 在互联网大数据时代,数据的收集、分析与应用成为企业及研究者的重要工作之一。Snoopy-2.0,作为一个出色的网页数据采集类库,为这个过程提供了高效且便捷的解决方案。本文将...

    基于PHP的snoopy 强大的PHP采集类.zip

    在使用Snoopy进行数据采集时,必须遵循网站的robots.txt协议,尊重网站的版权和隐私政策。不要对网站造成过大的负担,避免被服务器封禁IP。 总的来说,Snoopy提供了一个简洁而强大的框架,使PHP开发者能够轻松地...

    基于PHP的snoopy强大的PHP采集类源码.zip

    【标题】"基于PHP的snoopy强大的PHP采集类源码.zip" 提供的是一个用于网页数据抓取的工具,Snoopy是一个流行的PHP类库,专为处理Web抓取和模拟浏览器行为而设计。在PHP开发中,当需要从网站获取数据而没有提供API时...

    snoopy php来提取网页中你要的信息

    以下是一个简单的使用示例,展示了如何使用Snoopy抓取网页内容并提取其中的链接: ```php // 创建Snoopy对象 $snoopy = new Snoopy; // 设置最大重定向次数 $snoopy-&gt;maxredirs = 5; // 获取网页内容 $snoopy-&gt;...

    snoopy手册中文版

    以下是一段使用Snoopy抓取网页内容的示例代码: ```php // 引入Snoopy类 include "Snoopy.class.php"; // 创建Snoopy对象 $snoopy = new Snoopy; // 抓取PHP官方首页的内容 $snoopy-&gt;fetchtext(...

    Snoopy.class.php类及中文说明

    这个库在处理网页抓取、数据采集和自动化测试等任务时非常有用。 Snoopy 类的核心功能包括: 1. **HTTP请求方法**:Snoopy 提供了GET、POST、PUT、DELETE等多种HTTP请求方法,能够适应不同的Web API或网页交互需求...

    PHP实例开发源码—snoopy 强大的PHP采集类.zip

    【标题】"PHP实例开发源码—snoopy 强大的PHP采集类.zip" 提供的是一个使用PHP编写的名为Snoopy的网络爬虫类的源代码实例。Snoopy是一个广泛应用于PHP项目的网页抓取工具,它可以帮助开发者轻松地获取网页内容,模拟...

    snoopy

    snoopy

    Snoopy_试用心得

    ### Snoopy PHP 类详解 #### 一、简介 Snoopy 是一个强大的 PHP 类库,主要功能在于模拟 Web 浏览器的行为。...通过合理的配置和使用方法,开发者可以利用 Snoopy 实现高效的网络数据采集与处理工作。

    Php多线程内容采集器(集成snoopy simple_html_dom)。

    使用php curl族的多线程函数,并结合开源的snoopy 和simple_html_dom 对html的处理,使采集特定区域的内容轻松起来。当然,您也可以设置通过正则来采集。程序也可以采集远程图片到本地。详细使用说明见readme.html. ...

    snoopy使用方法

    通过上述示例,可以看到 Snoopy 的强大之处,它不仅能够高效地抓取网页内容,还能处理复杂的表单提交过程。此外,通过设置不同的类属性,可以实现更高级的功能,如代理服务器的支持、用户代理的定制等。总之,Snoopy...

    Snoopy类使用小例子

    Snoopy类的使用示例代码展示了如何包含Snoopy类文件、创建Snoopy对象实例,并通过实例调用相应的函数来获取网页内容和提交表单数据。首先,通过include语句包含Snoopy类定义文件。接着,创建一个Snoopy类的实例,并...

    网页采集类Snoopy类及中文说明.rar

    Snoopy.class.php,实现网页下载, 网页采集类,Snoopy的一些功能特点: 抓取网页的内容 fetch() 抓取网页的文本内容 (去除HTML标签) fetchtext() 抓取网页的链接,表单 fetchlinks() fetchform() 支持代理...

    PHP采集类Snoopy抓取图片实例

    Snoopy类的使用非常广泛,尤其在开发采集程序和小偷程序时,能提供便捷的接口实现数据采集任务。 3. Snoopy类的下载和使用 使用Snoopy之前,需要从其官方提供的地址下载Snoopy类库文件。下载后,需要将该类文件包含...

    Snoopy.class.rar_Snoopy.class.php

    通过这个简单的示例,我们可以看到如何使用Snoopy类库来获取指定URL的网页内容。在实际项目中,根据需求,开发者可能需要设置更复杂的请求参数,处理登录认证,或者抓取特定页面元素。 总的来说,Snoopy.class.php...

Global site tag (gtag.js) - Google Analytics