php采集程序

 更新时间:2016年11月25日 16:05  点击:1705

php采集程序,今天我们来看看我用php来写采集程序吧,我们用最简单的的吧,很多网上的cms都支持在线采集,采集一些文章在很短的时间就可以采集很多文章,好了既然我们是程序员自己也来写个超简单的采集程序吧.先来看年实例:

<?php 
 $url  =http://www.111cn.net/phper/php.html; 
 $handle  =file_get_contents($url);
 
?>

OK上面的文章就被我们采集到自己的服务器上来了,但是我们要怎么处理这些数据呢?那得看你自己了,好了就这么简单的.

php 保存远程服务器上图片,其实这也叫采集了,把远程服务器的图片保存到自己服务器上来,和采集文章差不多,采集图片就加一个header('content-type:image/png');申明文章的内容的类型,而文章就没必要了.

<?php
header('content-type:image/png');
echo file_get_contents("http://www.111cn.net/blog/upload/image/20080615055512.png");
?>

呵呵,你可以拿上面的代码去试一下哦,其实php功能很强大了,只是看你如何去使用了,如果用asp的话,那就相当的麻烦了.

本站原创转载请注明:  www.111cn.net 

class Page {
    // public param
    public $pageName    = 'page';   // 默认 page 标签,即 filename.php?pageName=4 中的 pageName
    public $prevPage    = '<';      // 上一页
    public $nextPage    = '>';      // 下一页
    public $prevBar     = '<<';     // 上一分页条
    public $nextBar     = '>>';     // 下一分页条
    // private param
    private $_totalNums = 1;        // 总记录数
    private $_barNum    = 10;       // 分页条显示分页个数
    private $_totalPage = 0;        // 总页数
    private $_nowPage   = 1;        // 当前页
    private $_perPage   = 10;       // 每页显示记录数
    private $_preUrl    = '';       // url 前缀
    private $_preNow    = 0;        // 当前页前显示分页个数 (范围应该是 0 至 $_barNum-1)
    private $_fromPage  = 0;        // 分页条起点
    private $_toPage    = 0;        // 分页条末端
    private $_offset    = 0;        // sql 查询记录偏移量
    // public functions -----------------------------------------------------------------
    // 构造函数 初始化分页变量
    // @param $nums int     总记录数
    // @param $per  int     每页显示记录数
    // @param $now  int     当前页数
    // @param $url  string  url前缀 默认为空
    public function __construct($nums, $per = '', $preNow = '', $barNum = '', $now = '', $url = '') {
        // 初始化
        $this->_set($nums, $per, $preNow, $barNum, $now, $url);
        $this->_totalPage   = ceil($this->_totalNums/$this->_perPage);
        $this->_offset      = ($this->_nowPage - 1) * $this->_perPage;
    }
    // 上一页
    public function getPrevPage() {
        // 当前页不是第一页
        if($this->_nowPage > 1) {
            return $this->_setLink($this->_setUrl($this->_nowPage - 1), $this->prevPage, 'prevpage');
        }
    }
    // 下一页
    public function getNextPage() {
        // 当前页小于总页数
        if($this->_nowPage < $this->_totalPage) {
            return $this->_setLink($this->_setUrl($this->_nowPage + 1), $this->nextPage, 'nextpage');
        }
    }
    // 第一页
    public function getFirstPage() {
        // 起点不是第一页
        if(($this->_nowPage - $this->_preNow) > 1) {
            return $this->_setLink($this->_setUrl(1), '1...', 'firstpage');
        }
    }
    // 最后一页
    public function getLastPage() {
        // 末端不大于总页数
        if(($this->_nowPage - $this->_preNow + $this->_barNum) <= $this->_totalPage) {
            return $this->_setLink($this->_setUrl($this->_totalPage), '...' . $this->_totalPage, 'lastpage');
        }
    }
    // 上一分页条
    public function getPrevBar() {
        // 起点大于一个分页条数
        if(($this->_nowPage - $this->_preNow) > $this->_barNum) {
            return $this->_setLink($this->_setUrl(($this->_nowPage - $this->_preNow) - $this->_barNum), $this->prevBar, 'prevbar');
        }
    }
    // 下一分页条
    public function getNextBar() {
        // 末端不大于总页数
        if(($this->_nowPage - $this->_preNow + $this->_barNum) <= $this->_totalPage) {
            return $this->_setLink($this->_setUrl($this->_fromPage + $this->_barNum), $this->nextBar, 'nextbar');
        }
    }
    // 分页条
    public function pageBar() {
        // 初始化分页条的始末端点
        $this->_toPage = $this->_nowPage + ($this->_barNum - $this->_preNow - 1);
        if($this->_toPage > $this->_totalPage) {
            $this->_preNow = $this->_barNum - ($this->_totalPage - $this->_nowPage + 1);
            $this->_toPage = $this->_totalPage;
        }
        if($this->_toPage < $this->_barNum) {
            $this->_toPage = $this->_barNum;
        }
        $this->_fromPage = $this->_nowPage - $this->_preNow;
        if($this->_fromPage < 1) {
            $this->_fromPage = 1;
        }
        // 初始化分页条
        $return = '';
        for($i = $this->_fromPage; $i <= $this->_toPage; $i++) {
            if($i != $this->_nowPage) {
                $return .= $this->_setLink($this->_setUrl($i), $i, 'page');
            } else {
                $return .= '<span class="nowpage">' . $i . '</span>';
            }
        }
        return $return;
    }
    // 返回偏移量 用于 sql 查询
    public function getOffset() {
        return $this->_offset;
    }
    // 返回总记录数
    public function getTotalNums() {
        return '<span class="totalnums">' . $this->_totalNums . '</span>';
    }
    // 显示分页
    public function showPage() {
        return $this->getTotalNums() . $this->getFirstPage() . $this->getPrevBar() . $this->getPrevPage() . $this->pageBar() . $this->getNextPage() . $this->getNextBar() . $this->getLastPage();
    }
    // private functions ----------------------------------------------------------------
    //
    private function _set($nums, $per, $preNow, $barNum, $now, $url) {
        // 设置总记录数
        if($nums > 0) {
            $this->_totalNums = $nums;
        }
        // 设置每页显示记录数
        if($per > 0) {
            $this->_perPage = $per;
        }
        // 设置当前页前显示分页个数
        if($preNow > 0) {
            $this->_preNow = $preNow;
        }
        // 设置分页条链接个数
        if($barNum > 0) {
            $this->_barNum = $barNum;
        }
        // 设置当前页
        if(empty($now)) {
            // 自动获取
            if(isset($_GET[$this->pageName])) {
                $this->_nowPage = intval($_GET[$this->pageName]);
            }
        } else {
            // $now 已手动处理
            $this->_nowPage = intval($now); //
        }
        // 设置 url 前缀
        if(!empty($url)) {
            // $url 已手动处理
            $this->_preUrl = $url . (stristr($url, '?') ? '&' : '?') . $this->pageName . '=';
        } else {
            // 自动获取
            if(empty($_SERVER['QUERY_STRING'])) {
                // url 中不存在查询
                $this->_preUrl = $_SERVER['REQUEST_URI'] . '?' . $this->pageName . '=';
            } else {
                if(stristr($_SERVER['QUERY_STRING'], $this->pageName . '=')) {
                    // 查询中有 page=n(2,3...)
                    $this->_preUrl = str_replace($this->pageName . '=' . $this->_nowPage, '', $_SERVER['REQUEST_URI']);
                    $lastCharacter = $this->_preUrl[strlen($this->_preUrl) - 1];
                    if($lastCharacter == '?' || $lastCharacter == '&') {
                        // page=n(2,3...) 在原 url 的末尾
                        $this->_preUrl .= $this->pageName . '=';
                    } else {
                        // page=n(2,3...) 不在原 url 的末尾
                        $this->_preUrl .= '&' . $this->pageName . '=';
                    }
                } else {
                    // 查询中没有 page=n(2,3...)
                    $this->preUrl = $_SERVER['REQUEST_URI'] . '&' . $this->pageName . '=';
                }
            }
        }
    }
    // 设置链接地址
    private function _setUrl($pageNo) {
        return $this->_preUrl . $pageNo;
    }
    // 设置链接
    private function _setLink($url, $link, $style = '') {
        $style = 'class="' . $style . '"';
        return '<a href="' . $url . '" ' . $style . '>' . $link . '</a>';
    }
}
//

使用方法

$total = 1245;
//class  Page($nums, $per = '', $preNow = '', $barNum = '', $now = '', $url = '')
$page = new Page($total);
$pager = $page->showPage();
$smarty->assign('pager', $pager);
$smarty->display('index.tpl');

<?php php实现图片远程采集
//本程序为初学者入门,你可以随意更改使用
//如有问题或有什么改进和优化,还望与我分享 QQ:297535861
//与你一块进步。
//2007-12-26
function str_substr($str ,$statr, $end) { //字符串截取函数
  $x = strpos($str, $statr);
  return substr($str,  $x+strlen($start), strpos($str, $end)-$x+strlen($end)); 
}
//////////////////////////////////////////////////
$url="[url=http://www.XXXXXXX.XXX/XXX]http://www.XXXXXXX.XXX/XXX";//[/url]给据采集内容自己定,这句上传后给自动加了连接,请去掉
$str=file_get_contents($url); ///file_get_contents -- 将整个文件读入一个字符串
$start='#######';//截取内容前的html  最后网页中唯一
$end='########';//截取内容后的html 最后网页中唯一
$content=str_substr($str , $start, $end);
//echo $content; //测试采集到的内容
echo '<hr>';
///////////////////////////////////////////////////
$img_array = array();
$content1 = stripslashes($content); //stripslashes函数作用是去掉字符串中的转义字符
if (get_magic_quotes_gpc()) $content1 = stripslashes($content1);
//echo $content1;//文章内容嘿嘿开始处理了
preg_match_all("/(src|SRC)="(http://(.+)/(.+).(gif|jpg|jpeg|bmp|png))/isU",$content1,$img_array,PREG_PATTERN_ORDER);//正则开始匹配所有的图片并放入数组$img_array中 ,=匹配规则可根据具体情况改写,这个通用性不强,还望那位高手给个通吃的匹配=
$img_array = array_unique($img_array[2]); //array_unique -- 移除数组中重复的值,$img_array[2]到现在没有高清楚,猜想可能是取出二维数组中的某组。
//print_r($img_array); //测试匹配到的内容
set_time_limit(0); //限定最大执行时间

//开始保存匹配内容中图片,修改名称并保存的本地文件夹中
foreach ($img_array as $key => $value) { //使用循环语句把匹配到的数组内容(图片)进行一一处理
if(file_get_contents($value)) $get_file = file_get_contents($value);//开始获取图片了哦 使用file_get_contents得到文件
else dir("出错");
$filetime = time(); //得到时间戳
$filepath = "pic2/".date("Ym",$filetime)."/";//图片保存的路径目录
!is_dir($filepath) ? mkdir($filepath) : null;  //如果目录不存在,则创建目录,注意:要有相应的目录权限。
$filename = date("YmdHis",$filetime).rand(100,999).'.'.substr($value,-3,3); //生成文件名,rand(100,999)的作用是防止文件名重复
$fp = @fopen($filepath.$filename,"w"); //以写方式打开文件
@fwrite($fp,$get_file); //
fclose($fp);//完工,哈
$content1 = preg_replace("/".addcslashes($value,"/")."/isU", "pic2/".date("Ym",$filetime)."/".$filename, $content1);  //顺便替换一下文章里面的图片地址
echo $value.'=>'.'pic2/'.date('Ym',$filetime).'/'.$filename.'<br>';  //测试图片复制前后,路径是否正常。
}
echo '<hr>';
echo $content1; //可把$content1存入数据库
?>


<?php
$conn = mysql_connect("localhost","root","root")  or die("数据库连接失入");
  mysql_select_db("new",$conn);
?>
分类:<select name="fid">
<?php
function mainfl()
{
    global $conn;
  $result=mysql_query("select id,fid,name from a where fid=0 order by id ",$conn);//这里默认的fid=0,表示这是第一级。通过这个可以查出所有fid=0的项,即所有的第一级主类
  if ($myrow=mysql_fetch_array($result))
  {
   do {
?>
    <option value=<?php echo $myrow["id"];?>><?php echo $myrow["name"];?></option>//$myrow["id"]输出主类的ID为查询子类做准备,$myrwo["name"]主类名字
<?php echo subfl($myrow["id"],"--");?>//调用子类函数subfl,使用--<?php
   }
   while ($myrow=mysql_fetch_array($result));
  }
}
//定义子级分类
function subfl($fid,$tag)//$fid那是主类ID,$tag为连接符
{
 global $conn;
 $result1=mysql_query("select id,fid,name from a where fid=$fid  order by id",$conn);//查询出fid=$fid的所有面,这里的$fid值为$myrow["id"]
 if ($myrow1=mysql_fetch_array($result1))
 {
  do {
?>
  <option value=<?php echo $myrow1["id"];?>><?php echo $tag.$myrow1["name"];?></option>//输出子类
<?php
    subfl($myrow1["id"],"-".$tag);
   }
  while ($myrow1=mysql_fetch_array($result1));
 }
}
echo mainfl();
?>
</select>
[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • 微信小程序实现点击导航条切换页面

    这篇文章主要为大家详细介绍了微信小程序实现点击导航条切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-19
  • 微信小程序手势操作之单触摸点与多触摸点

    这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
  • 微信小程序实现canvas分享朋友圈海报

    这篇文章主要为大家详细介绍了微信小程序实现canvas分享朋友圈海报,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21