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类
Nov 25 PHP
抓取YAHOO股票报价的类
May 15 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
PHP文件上传类实例详解
Apr 08 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
PHP PDOStatement::errorInfo讲解
Jan 31 PHP
Laravel修改验证提示信息为中文的示例
Oct 23 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
从javascript语言本身谈项目实战
2006/12/27 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
在Node.js中实现文件复制的方法和实例
2014/06/05 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
jQuery 获取页面li数组并删除不在数组中的key
2016/08/02 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python collections模块实例讲解
2014/04/07 Python
在Python的while循环中使用else以及循环嵌套的用法
2015/10/14 Python
import的本质解析
2017/10/30 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python 深度学习中的4种激活函数
2020/09/18 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
python tkinter实现连连看游戏
2020/11/16 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
一组SQL面试题
2016/02/15 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
购房委托书
2014/10/15 职场文书
七年级话题作文之执着
2019/11/19 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
MySQL常用慢查询分析工具详解
2022/08/14 MySQL