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 相关文章推荐
多数据表共用一个页的新闻发布
Oct 09 PHP
PHP4实际应用经验篇(1)
Oct 09 PHP
PHP中的日期及时间
Nov 23 PHP
php array_merge下进行数组合并的代码
Jul 22 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
请离开include_once和require_once
Jul 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
laravel学习笔记之模型事件的几种用法示例
Aug 15 PHP
PHP7数组的底层实现示例
Aug 25 PHP
php 策略模式原理与应用深入理解
Sep 25 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中几种常见安全设置详解
2010/04/06 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
ThinkPHP中html:list标签用法分析
2016/01/09 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
jquery 缓存问题的几个解决方法
2013/11/11 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
python的正则表达式re模块的常用方法
2013/03/09 Python
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
高级销售员求职信
2013/10/25 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL