XX之家的爬蟲之旅

來源:互聯網
上載者:User

標籤:

[導讀]  因為本人公司正處於P2P的行業,分析行業資料,對平台的運營決策有著很大的作用,因此需要爬XX之家的相關資料。

1、分析

       通過右鍵查看頁面原始碼發現頁面結構為表格版面配置,因此設想可以分為四個步驟來採集資料:1、使用爬蟲將頁面抓取下來;2、對頁面資料進行解析;3、入庫;4、寫個定時服務每天定時抓取。因為公司網站也使用了PHP最近也學習了一點,聽說curl非常適合用來爬去網頁,決定用PHP程式來抓取。

2、抓取頁面

       有一個小插曲,剛開始抓取的時候,返回的頁面資訊都是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進行替換,最後安裝XX平台的資料,進行拼接入庫的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

 

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

XX之家的爬蟲之旅

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.