php 论坛采集程序 模拟登陆,抓取页面 实现代码_php实例

来源:脚本之家  责任编辑:小易  

你没转义,所以出错preg="/<h3><span class=\\"com-num\\"><a target=\\"_blank\\" href=\\"#\\">comment num<\\/a><\\/span><a target=\\"_blank\\" href='(.*)'>(.*)<\\/a><\\/h3>#iUs/;www.zgxue.com防采集请勿采集本网。

复制代码 代码如下:

<?php

各有长处。asp的代码执行效率高,php是跨平台的。php的有些东西都是免费的,asp是利用教本的,比较易学易用。

// 吴燕军

// 2009-06-27

采集文章内容就相对麻烦,但是通过层层分析,层层剥离,一定要进行大量的网站分析,写出多套通用性比较强的采集规则,程序在采集的时候也要进行大量分析。有几点是可以肯定的,那就是绝对不能要求采集效果

// 采集程序php

php class HttpCurl { private$_info,$_body,$_error;public function_construct(){ if!function_exists('curl_init')){ throw new Exception('cURL not enabled!');} } public function get($url){ this

set_time_limit(0);

opts=array 'http'=>array 'method'=>\"GET\", 'timeout'=>60, 'user_agent'=>'Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/27.0.1453.94 Safari/537.36' context=stream

//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模拟登录采集数据只能应用于一些没有加密数据的网站。所以你登录采集到的是空白也是正常内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • php下获取discuz论坛登录用户名、用户组、用户id等信息的实现代码
  • [php] 我的微型论坛的简单教程[已完成]
  • php中通过curl模拟登陆discuz论坛的实现代码
  • php著名开源论坛:discuz!跨站大全
  • php开发论坛系统
  • laravel 添加多语言提示信息的方法
  • php之图片上传类实例代码(加了缩略图)
  • thinkphp基于phpexcel导入excel文件的方法
  • 使用codeigniter的类库做图片上传
  • php 搜索框提示(自动完成)实例代码
  • 基于thinkphp实现的日历功能实例详解
  • php实现微信商户支付企业付款到零钱功能
  • php 接入微信扫码支付总结(总结篇)
  • php错误warning: cannot modify header information - headers a
  • php中curl使用指南
  • php模拟登陆 知乎 显示了登录成功的unicode 但是采集登录后的网页是空白
  • 这是一个php采集程序问题。。谢谢大家了
  • 一个php采集程序问题,想知道您以前是怎么解决的。。谢谢了
  • php采集程序问题。。初学者
  • ASP 和 PHP 编的采集程序那一种好?
  • php自动采集如何实现
  • 求php采集程序代码+详解。。大神拯救已经快要奔溃的我吧。。。
  • php采集程序问题
  • PHP 的网页采集程序..
  • 谁能给我个带采集功能的PHP程序?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php实例php下获取discuz论坛登录用户名、用户组、用户id等信息的实现代码[php] 我的微型论坛的简单教程[已完成]php中通过curl模拟登陆discuz论坛的实现代码php著名开源论坛:discuz!跨站大全php开发论坛系统laravel 添加多语言提示信息的方法php之图片上传类实例代码(加了缩略图)thinkphp基于phpexcel导入excel文件的方法使用codeigniter的类库做图片上传php 搜索框提示(自动完成)实例代码基于thinkphp实现的日历功能实例详解php实现微信商户支付企业付款到零钱功能php 接入微信扫码支付总结(总结篇)php错误warning: cannot modify header information - headers aphp中curl使用指南php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php删除数组中空值的方法介绍php从数组中删除元素的四种方法实php实现原生态图片上传封装类方法yii2主题(theme)用法详解thinkphp3.1新特性之action参数绑定zend framework教程之zend_registry对象用php四种基础算法代码实例thinkphp 3.2.3实现加减乘除图片验证码php使用异或实现的加密解密实例thinkphp基本的增删查改操作实例教程对laravel的session获取与存取方法详解解决phpcms更换javascript的幻灯片代码调
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved