• 基于larbin的搜索蜘蛛的扩展,自动匹配提取正文数据和入库,sphinx全文检索


    原理:提取爬虫采集回来的文件,提取正文内容。

    程序分2个文件夹:

      为避免shell检测出错,起名为pa_main为爬虫主程序,pa_control为控制程序。

      

      功能:larbin采集数据 检测文件大小 处理文件夹下网页文件提取入库  * 时间:2013-4-2  * 作者:lovelover  * 操作:

       按照以下顺序执行

     ./shstart_daxiao.sh #(检测save文件夹大小 以便控制larbin的实时开关)   ./shstart_getcode.sh #(提取网页标题和内容 入库)   ./shstart_jiance.sh #(打开检测save文件夹有新增文件没)

      ./killallphp.sh &   

      关闭larbin进程用 killall larbin 结束

    dingshi_jiance.sh为定时检测save目录的大小

    代码如下:

    #!/bin/sh
    while [ 1 ]
    do
    echo ""
    echo "正在定时检测save大小 控制爬虫的开关。。。!"
    echo ""
    s=`du -sh -b /pa_main/save|awk '{print $1}'`
    echo "当前大小: $s。"
    echo ""
    if [ $s -gt 1000000000 ] 
    then
    	echo "超过1000M了"
    	echo ""
    
    	if test $( pgrep -f larbin | wc -l ) -eq 0
        then
            echo "爬虫关闭中,不做任何操作!"
            echo ""
        else
            echo "发现爬虫运行中,立刻终止进程!"
            echo ""
    		killall larbin
        fi
    
    else
    
    	if [ $s -gt 900000000 ]
    	then 
    		echo "大于900M了,不做任何操作!"
    		echo ""
    		
    	else
    
    		echo "小于900M了"	
    		echo ""
    
    		if test $( pgrep -f larbin | wc -l ) -eq 0 
    		then
    			echo "爬虫关闭中,马上开启"
    			echo ""
    			cd /pa_main/
    			./larbin -scratch &
    		else
    			echo "爬虫运行中..."
    			echo ""
    		fi	
    
    	fi 
    
    fi
    
    echo ""
    echo "---------------------------------------------------"
    
    sleep 5
    done
    

      

    dingshi_jiance.sh为 定时检测后面提取数据的队列的进度情况

    代码如下:

    #!/bin/sh
    while [ 1 ]
    do
    echo "start dingshi_jiance!";
    
    PHP="/usr/local/php/bin/php"
    
    PROGRAM="/pa_control/aaa_jiance.php"
    
    #start dameo
    
    $PHP $PROGRAM &
    
    
    sleep 60
    done
    

      aaa_jiance.php 实际检测代码如下:

    <?php
    //error_reporting(0);
    set_time_limit(0); 
    include_once dirname(__FILE__)."/httpsqs_client.php";  
    
    
    /*遍历目录*/      
    function traverse($path){   
    
         $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
         while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
             $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径         
    
             if($file == '.' || $file == '..') {
                 continue;
             } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
    
                 echo 'Directory ' . $file . ':<br>';
                 traverse($sub_dir);
    
             } else {    //如果是文件,直接输出
    
                
    
                 echo "File in Directory " . $path . ": " . $file . "<br>";
                 echo "<br>";
     
    
                 $httpsqs_host='127.0.0.1';
                 $httpsqs_port='1218';
                 $httpsqs_auth='';
                 $httpsqs_charset='UTF-8';
    
                 $httpsqs = new httpsqs($httpsqs_host, $httpsqs_port, $httpsqs_auth, $httpsqs_charset);            
                 $queue_name='getcode';
                 $queue_data=$path.'/'.$file;
                 $httpsqs->put($queue_name, $queue_data); 
    
                 echo '发布队列成功!';
                 echo "<br>";
     
     
             }
         }           
    }
    
    
     
    /*检测是否处理完了 开始*/
    $httpsqs_host='127.0.0.1';
    $httpsqs_port='1218';
    $httpsqs_auth='';
    $httpsqs_charset='UTF-8';
    
    $queue_name='getcode';    
    $httpsqs8 = new httpsqs($httpsqs_host, $httpsqs_port, $httpsqs_auth, $httpsqs_charset); 
    
    $result8 = $httpsqs8->status_json($queue_name);
    $str=json_decode($result8);  
    $num=$str->unread;
    
    if($num=='0')
    {
    
        traverse('/pa_main/save');
    
    }else{
    
        echo "上次操作还没有提取完,还剩 ".$num." 个。过1分钟后自动再试\n";
    
    }
    
    /*检测是否处理完了 结束*/
    
    
     
    
    ?>
     
    

      。。。。。。。。。。。

    全自动配置了爬虫 让其自动抓取数据 提取 哈哈 经测试在服务器一天200M的数据提取入库

    我的QQ 1279331492 探讨

  • 相关阅读:
    git本地分支管理
    SpringMVC的第一个入门案例
    原来热加载如此简单,手动写一个 Java 热加载吧
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    SpringBoot 开发案例之参数传递的正确姿势
    MENU Java 中的 final、finally、finalize 有什么不同?
    Java Web 学习(1) —— Servlet
    Spring 基础知识学习
    SpringBoot中如何灵活的实现接口数据的加解密功能?
    Java中常用的四种线程池
  • 原文地址:https://www.cnblogs.com/zhaoguoliang/p/3011629.html
Copyright © 2020-2023  润新知