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 相关文章推荐
ftp类(myftp.php)
Oct 09 PHP
PHP字符转义相关函数小结(php下的转义字符串)
Apr 12 PHP
php强制下载类型的实现代码
Apr 21 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Jul 08 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
UPUPW 更新 64 位 Apache 系列 PHP 7.0 正式版
Dec 08 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
PHP7 echo和print语句实例用法
Feb 15 PHP
TP5框架请求响应参数实例分析
Oct 17 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简单实现发送带附件的邮件
2015/06/10 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
2017/04/03 PHP
javascript不同页面传值的改进版
2008/09/30 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
jQuery图片滚动图片的效果(另类实现)
2013/06/02 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
bootstrap模态框弹出和隐藏,动态改变中间内容的实例
2018/08/10 Javascript
JavaScript基础教程之如何实现一个简单的promise
2018/09/11 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
讲解Python中的递归函数
2015/04/27 Python
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
Python3结合Dlib实现人脸识别和剪切
2018/01/24 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
c/c++某大公司的两道笔试题
2014/02/02 面试题
参观监狱心得体会
2014/01/02 职场文书
代理商会议邀请函
2014/01/27 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
教师党员个人总结
2015/02/10 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
公司转让协议书
2016/03/19 职场文书
2019大学生实习报告
2019/06/21 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书