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 相关文章推荐
使用XDebug调试及单元测试覆盖率分析
Jan 27 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
php.ini 配置文件的深入解析
Jun 17 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
php+ajax+json 详解及实例代码
Dec 12 PHP
php获取网站根目录物理路径的几种方法(推荐)
Mar 04 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 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获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
jQuery添加/改变/移除CSS类及判断是否已经存在CSS
2014/08/20 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
深入理解AngularJs-scope的脏检查(一)
2017/06/19 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
浅析Python四种数据类型
2018/09/26 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Python小白必备的8个最常用的内置函数(推荐)
2019/04/03 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
Pyqt5实现英文学习词典
2019/06/24 Python
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
大学生简历中个人的自我评价
2013/10/06 职场文书
中青班党性分析材料
2014/02/16 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
村抢险救灾方案
2014/05/09 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python