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 相关文章推荐
一个简洁的多级别论坛
Oct 09 PHP
echo, print, printf 和 sprintf 区别
Dec 06 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
搭建基于Docker的PHP开发环境的详细教程
Jul 01 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
Aug 29 PHP
PHP用FTP类上传文件视频等的简单实现方法
Sep 23 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
php封装的mongodb操作类代码
Aug 06 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
Sep 13 PHP
使用vs code编辑调试php配置的方法
Jan 29 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从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP使用CURL实现下载文件功能示例
2019/06/03 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
微信小程序实现发红包功能
2018/07/11 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
Python中Django框架下的staticfiles使用简介
2015/05/30 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
Appium+Python自动化测试之运行App程序示例
2019/01/23 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Django Rest framework频率原理与限制
2019/07/26 Python
浅析使用Python搭建http服务器
2019/10/27 Python
Django之腾讯云短信的实现
2020/06/12 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
会议邀请函范文
2014/01/09 职场文书
给朋友的道歉短信
2015/05/12 职场文书