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 获取远程网页内容的函数
Sep 08 PHP
php语言流程控制中的主动与被动
Nov 05 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
Jun 06 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
php递归删除目录与文件的方法
Jan 30 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
浅谈PHP的反射机制
Dec 15 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
php更新cookie内容的详细方法
Sep 30 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 04 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下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
php使用百度天气接口示例
2014/04/22 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
JavaScript DOM基础
2015/04/13 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
Kindeditor单独调用多图上传实例
2017/07/31 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
Python Queue模块详解
2014/11/30 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Django 路由控制的实现代码
2018/11/08 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
Django admin组件的使用
2020/10/24 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
后进生转化工作制度
2014/01/17 职场文书
工商管理专业自荐信
2014/06/03 职场文书
信仰心得体会
2014/09/05 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
上甘岭观后感
2015/06/10 职场文书