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个人网站架设连环讲(二)
Oct 09 PHP
mysql_num_rows VS COUNT 效率问题分析
Apr 23 PHP
php除数取整示例
Apr 24 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例
Apr 14 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PDO::quote讲解
Jan 29 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
限制复选框的最大可选数
2006/07/01 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
用js实现放大镜的效果的简单实例
2016/05/23 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
vue自定义指令directive实例详解
2018/01/17 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Webpack3+React16代码分割的实现
2021/03/03 Javascript
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
在Keras中实现保存和加载权重及模型结构
2020/06/15 Python
selenium如何定位span元素的实现
2021/01/13 Python
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
护士毕业生自荐信
2014/02/07 职场文书
党员民主评议自我评价
2014/10/20 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
golang 在windows中设置环境变量的操作
2021/04/29 Golang
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP