文章出處

[導讀]  因為本人公司正處于P2P的行業,分析行業數據,對平臺的運營決策有著很大的作用,因此需要爬網貸之家的相關數據。

1、分析

       通過右鍵查看頁面源代碼發現頁面結構為表格布局,因此設想可以分為四個步驟來采集數據:

      1、使用爬蟲將頁面抓取下來;

      2、對頁面數據進行解析;

      3、入庫(mysql);

      4、寫個定時服務每天定時抓取。

      因為公司網站使用PHP,最近也學習了一點,curl非常適合用來爬去網頁,決定用PHP程序進行抓取。

image

2、抓取頁面

       網貸之家有一個數據的二級域名,展示所有接入的P2P公司的各種成交數據,輸入日期可以查詢對應日期的數據(http://shuju.wangdaizhijia.com/indexs-0-0-0-400-0-0.html?startTime=2015-04-04&endTime=2015-04-04),分析url發現只要改變后面的日期就可以分別的抓取各個日期下的數據,分析完畢,找一個url開始抓取;有一個小插曲,剛開始抓取的時候,返回的頁面信息都是404.html,最后分析發現網站對非瀏覽器的請求進行了屏蔽,直接跳轉404。后臺加綠色代碼的部分,成功抓取數據。

function crawl($url){
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_HEADER, false);
         

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)');

         curl_setopt($curl, CURLOPT_POST, 1); 
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
         $result=curl_exec($ch);
         curl_close($ch);
         return $result;
    }

3、解析數據

     查看頁面源代碼發現,第一行為title去掉,最后兩列為平臺的連接和關注,均過濾掉。第一列的id需要根據下列的連接來截取,中間的所有數據會有漢子的單位和一些特殊字符,使用preg_replace進行替換,最后按照網貸之家平臺的數據格式進行拼接入庫的SQL,返回done。

function  analyze($dom,$satTime){
        $html = new simple_html_dom();
        $sql= "insert into XXX_data (XXPlatId,platName,averageMonth,dayTotal,averageRate,investNumber,averageInvestMoney,averageBorrowTime,borrowNumer,borrowBidNumber,averageBorrowMoney,firstTenInvestRate,firstTenBorrowRate,bidEndTime,registerTime,registerMoney,leverageFund,invest30total,repay60total,repayTotal,statisticsTime,excuteTime) values ";                
        $html->load($dom);
        $istitle=0;
        foreach($html->find('tr') as $tr){
          $istitle=$istitle+1;
          if($istitle==1){
            continue;
          }
          $sql.="(";
          $count=0;
          foreach($tr->find('td') as $element){       
              $count=$count+1;
              if($count==1){
                $href=$element->next_sibling()->find('a', 0)->href;
                $href=strstr($href, '.', TRUE);
                $href=strstr($href,'-');            
                $sql.="'".substr($href,1)."',";
              }elseif($count==2){
                $val=$element->find('a', 0)->innertext;
                $sql.="'".$val."',";
              }elseif($count<21){
                $patterns = array();
                $patterns[0] = '/([\x80-\xff]*)/i';
                $patterns[1] = '/[%*]/';
                $val=preg_replace($patterns,'',$element->innertext);
                $sql.="'".$val."',";
              }
          }
          $sql.="'".$satTime."','".date('Y-m-d H:i:s')."'),";    
        } 
        $sql = substr($sql,0,strlen($sql)-1);
        $sql = strip_tags($sql);
        return $sql;
    }

4、入庫

         通過網上的查找學習,發現PHP操作mysql比起java來說更簡單,幾句代碼搞定.

 function  save($sql){
        $con = mysql_connect("192.168.0.1","root","root");
        if (!$con){
           die('Could not connect: ' . mysql_error());
        }
        mysql_select_db("xx_data", $con);
        mysql_query("set names utf8");
        mysql_query($sql);
        mysql_close($con);
    }

5、批量爬取

     通過分析數據的查詢條件,每次的查詢都是根據url后綴的日期來查詢當日交易數據,  http://XXX/indexs.html?startTime=2015-04-01&endTime=2015-04-01,因為只需要遍歷歷史日期來拼接URl就用來爬取歷史的所有交易。

function execute(){
      $starttime="2014-04-15";
      $endtime="2015-04-15";
      for($start = strtotime($starttime); $start <= strtotime($endtime);$start += 86400){
         $date=date('Y-m-d',$start);
         $url="http://shuju.XX.com/indexs.html?startTime=".$date."&endTime=".$date;
         //第一步 抓取
         $dom=crawl($url);
         //第二步  解析
         $sql=analyze($dom,$date);
         //第三步 入庫
         save($sql);
     }
      echo  "execute end";
    }
     
     execute();

6、設置定時服務

       設置定時任務來每天固定時間來抓取最新的數據,以免每次手工來執行,php也有自己的定時任務,但是網上看了下實現起來太復雜,因此利用linux的crontab來實現,linux下面輸入crontab –e 進入編輯狀態,添加一條定時利用curl來調用,至此爬蟲功能完畢。

    30 09 * * * curl  http://192.168.0.1/crawl.php

 

此程序僅供學習交流,如果有需要完整源碼的朋友可以單獨聯系我。


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()