php 论坛采集程序 模拟登陆,抓取页面 实现代码


Posted in PHP onJuly 09, 2009
<?php 
// 吴燕军 
// 2009-06-27 
// 采集程序php 
set_time_limit(0); 
//cookie保存目录 
$cookie_jar = '/tmp/cookie.tmp'; 
/*函数------------------------------------------------------------------------------------------------------------*/ 
//模拟请求数据 
function request($url,$postfields,$cookie_jar,$referer){ 
$ch = curl_init(); 
$options = array(CURLOPT_URL => $url, 
CURLOPT_HEADER => 0, 
CURLOPT_NOBODY => 0, 
CURLOPT_PORT => 80, 
CURLOPT_POST => 1, 
CURLOPT_POSTFIELDS => $postfields, 
CURLOPT_RETURNTRANSFER => 1, 
CURLOPT_FOLLOWLOCATION => 1, 
CURLOPT_COOKIEJAR => $cookie_jar, 
CURLOPT_COOKIEFILE => $cookie_jar, 
CURLOPT_REFERER => $referer 
); 
curl_setopt_array($ch, $options); 
$code = curl_exec($ch); 
curl_close($ch); 
return $code; 
} 
//获取帖子列表 
function getThreadsList($code){ 
preg_match_all('/ <!--[.|\r|\n]*? <a href=\"viewthread.php\?tid=(\d+)/',$code,$threads); 
return $threads[1]; 
} 
//判断该帖子是否存在 
function isExits($code){ 
preg_match('/ <p>指定的主题不存在或已被删除或正在被审核,请返回。 <\/p>/',$code,$error); 
return isset($error[0])?false:true; 
} 
//获取帖子标题 
function getTitle($code){ 
preg_match('/ <h1>[^ <\/h1>]*/',$code,$title_tmp); 
$title = $title_tmp[0]; 
return $title; 
} 
//获取帖子作者: 
function getAuthor($code){ 
preg_match('/ <a href=\"space.php\?uid=\d+\" target=\"_blank\" id=\"userinfo\d+\" onmouseover=\"showMenu\(this\.id\)\">.+/',$code,$author_tmp); 
$author = strip_tags($author_tmp[0]); 
return $author; 
} 
//获取楼主发表的内容 
function getContents($code){ 
preg_match('/ <div id=\"postmessage_\d+\" class=\"t_msgfont\">(.|\r|\n)*? <\/div>/',$code,$contents_tmp); 
$contents = preg_replace('/images\//','http://bbs.war3.cn/images/',$contents_tmp[0]); 
return $contents; 
} 
//打印帖子标题 
function printTitle($title){ 
echo " <strong> <h2>帖子标题: </h2> </strong>",strip_tags($title)," <br/> <br/>"; 
} 
//输出帖子作者 
function printAuthor($author){ 
echo " <strong> <h2>帖子作者: </h2> </strong>",strip_tags($author)," <br/> <br/>"; 
} 
//打印帖子内容 
function printContents($contents){ 
echo " <strong> <h2>作者发表的内容: </h2>",$contents," </strong> <br/>"; 
} 
//错误 
function printError(){ 
echo " <i>该帖子不存在! </i>"; 
} 
/*函数列表end---------------------------------------------------------------------------------------------------*/ 
/*登录论坛 begin*/ 
$url = 'http://bbs.war3.cn/logging.php?action=login'; 
$postfields='loginfield=username&username=1nject10n& password=xxxxxx&questionid=0&cookietime=315360000& referer=http://bbs.war3.cn/&loginsubmit=提交'; 
request($url,$postfields,$cookie_jar,''); 
unset($postfields,$url); 
/*登录论坛 end*/ 
/*获取帖子列表(位于第一页的帖子) begin*/ 
$url = 'http://bbs.war3.cn/forumdisplay.php?fid=57'; 
$code = request($url,'',$cookie_jar,''); 
$threadsList = getThreadsList($code); 
/*获取帖子列表 end*/ 
//帖子序列 
$rows = 0; 
/*循环抓取所有帖子源代码 begin*/ 
foreach($threadsList as $list){ 
$url = "http://bbs.war3.cn/viewthread.php?tid=$list"; 
if(isExits($code)){ 
$code = request($url,'',$cookie_jar,''); 
$color = $rows%2==0?'#00CCFF':'#FFFF33'; 
echo " <div style='background-color:$color'>"; 
echo " <h1>第",($rows+1),"贴: </h1> <br/>"; 
$author = getAuthor($code); 
printAuthor($author); 
$title = getTitle($code); 
printTitle($title); 
$contents = getContents($code); 
printContents($contents); 
echo " </div>"; 
$rows++; 
} 
else 
printError(); 
echo "----------------------------------------------------------------------------------------- <br/> <br/>"; 
} 
/*抓取源代码 end*/ 
?>
PHP 相关文章推荐
php中的观察者模式
Mar 24 PHP
PHP以及MYSQL日期比较方法
Nov 29 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
php程序内部post数据的方法
Mar 31 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
php简单实现多语言切换的方法
May 09 PHP
php实现的中文分词类完整实例
Feb 06 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
YII框架模块化处理操作示例
Apr 26 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 PHP
程序员编程十条戒律
Jul 09 #PHP
php 执行系统命令的方法
Jul 07 #PHP
PHP 页面跳转到另一个页面的多种方法方法总结
Jul 07 #PHP
php 多个submit提交表单 处理方法
Jul 07 #PHP
PHP 上传文件大小限制
Jul 05 #PHP
phpmyadmin MySQL 加密配置方法
Jul 05 #PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 #PHP
You might like
用php实现让页面只能被百度gogole蜘蛛访问的方法
2009/12/29 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php 中英文语言转换类
2011/09/07 PHP
PHP内核探索之变量
2015/12/22 PHP
PHP中的session安全吗?
2016/01/22 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
2015/06/03 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
vue中npm包全局安装和局部安装过程
2019/09/03 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python tkinter常用操作代码实例
2020/01/03 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Draper James官网:知名演员瑞茜·威瑟斯彭所创品牌
2017/10/25 全球购物
如何查看在weblogic中已经发布的EJB
2012/06/01 面试题
2014年最新学习全国两会精神心得
2014/03/17 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
庆六一宣传标语
2014/10/08 职场文书
2014年生产部工作总结
2014/12/17 职场文书
导游词300字
2015/02/13 职场文书
个人年底工作总结
2015/03/10 职场文书
老乡会致辞
2015/07/28 职场文书