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 相关文章推荐
改进的IP计数器
Oct 09 PHP
JS与PHP向函数传递可变参数的区别实例代码
May 18 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
laravel 5 实现模板主题功能
Mar 02 PHP
php实现过滤字符串中的中文和数字实例
Jul 29 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
完美解决在ThinkPHP控制器中命名空间的问题
May 05 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
PHP array_reverse() 函数原理及实例解析
Jul 14 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.MVC的模板标签系统(四)
2006/09/05 PHP
PHP输出缓存ob系列函数详解
2014/03/11 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
ThinkPHP5.1表单令牌Token失效问题的解决
2019/03/22 PHP
Prototype 学习 工具函数学习($w,$F方法)
2009/07/12 Javascript
JavaScript高级程序设计(第3版)学习笔记10 再访js对象
2012/10/11 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
[03:55]显微镜下的DOTA2特别篇——430灰烬之灵神级操作
2014/06/24 DOTA
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python连接DB2数据库
2016/08/27 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
python 实现dict转json并保存文件
2019/12/05 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
应聘自荐书
2013/10/08 职场文书
大学生毕业鉴定
2014/01/31 职场文书
环保建议书100字
2014/05/14 职场文书
应聘教师自荐书
2014/06/16 职场文书
音乐学专业求职信
2014/07/22 职场文书
2014年小学数学工作总结
2014/12/12 职场文书
怒海潜将观后感
2015/06/11 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技