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 XPath对XML文件查找及修改实现代码
Jul 27 PHP
php提示无法加载或mcrypt没有找到 PHP 扩展 mbstring解决办法
Mar 27 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
Jun 20 PHP
php加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
PHP中使用数组指针函数操作数组示例
Nov 19 PHP
php创建、获取cookie及基础要点分析
Jan 26 PHP
php数组键值用法实例分析
Feb 27 PHP
yii2使用ajax返回json的实现方法
May 14 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
Feb 27 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 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
javascript各浏览器中option元素的表现差异
2011/04/07 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
详解jQuery插件开发中的extend方法
2013/11/19 Javascript
php实例分享之实现显示网站运行时间
2014/05/20 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
javascript事件模型介绍
2016/05/31 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
js编写选项卡效果
2017/05/23 Javascript
vue+mockjs模拟数据实现前后端分离开发的实例代码
2017/08/08 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
python数据结构之链表的实例讲解
2017/07/25 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
小学生放飞梦想演讲稿
2014/08/26 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
放牛班的春天观后感
2015/06/01 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers