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 相关文章推荐
海河写的 Discuz论坛帖子调用js的php代码
Aug 23 PHP
PHP实时显示输出
Oct 02 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
php防止sql注入代码实例
Dec 18 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
如何正确配置Nginx + PHP
Jul 15 PHP
jquery+thinkphp实现跨域抓取数据的方法
Oct 15 PHP
微信开发之php表单微信中自动提交两次问题解决办法
Jan 08 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 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包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
javascript之bind使用介绍
2011/10/09 Javascript
JS简单实现元素复制示例附图
2013/11/19 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
Vue 实现拨打电话操作
2020/11/16 Javascript
python中文乱码的解决方法
2013/11/04 Python
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python numpy元素的区间查找方法
2018/11/14 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
python根据多个文件名批量查找文件
2019/08/13 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
Monki官网:斯堪的纳维亚的独立时尚品牌
2020/11/09 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
三年大学自我鉴定
2014/01/16 职场文书
总结表彰大会主持词
2014/03/26 职场文书
婚前协议书范本
2014/10/27 职场文书
外贸英文求职信范文
2015/03/19 职场文书
小学生表扬稿范文
2015/05/05 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书