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调用三种数据库的方法(1)
Oct 09 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php使用$_POST或$_SESSION[]向js函数传参
Sep 16 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
php搜索文件程序分享
Oct 30 PHP
php图片添加文字水印实现代码
Mar 15 PHP
ucenter中词语过滤原理分析
Jul 13 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 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计算2点经纬度之间的距离代码
2013/08/12 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
[原创]图片分页查看
2006/08/28 Javascript
“不能执行已释放的Script代码”错误的原因及解决办法
2007/09/09 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
JQuery 文本框回车跳到下一个文本框示例代码
2013/08/30 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
JavaScript中 this 指向问题深度解析
2017/02/21 Javascript
javascript cookie的基本操作(添加和删除)
2017/07/24 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
利用JS制作万年历的方法
2017/08/16 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
优雅的处理vue项目异常实战记录
2019/06/05 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
详解Python中的__new__()方法的使用
2015/04/09 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python 整数越界问题详解
2019/06/27 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
python调用win32接口进行截图的示例
2020/11/11 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
程序员岗位职责
2013/11/11 职场文书
环保公益广告语
2014/03/13 职场文书
党建工作整改措施
2014/10/28 职场文书
初婚初育证明范本
2014/11/24 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
小学生家长意见
2015/06/03 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python
JS监听Esc 键触发事键
2021/04/14 Javascript
python源码剖析之PyObject详解
2021/05/18 Python
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python