php單線程爬蟲類

來源:互聯網
上載者:User

標籤:php單線程爬蟲類

  • 代碼:
    /*** @desc:單線程爬蟲類* @author [Lee] <[<[email protected]>]>* @property* 1、callcontent 擷取給定url頁面中的內容的回呼函數* 2、calltodo 處理商務邏輯的回呼函數 如:把抓取到的內容處理後存到資料庫* @method* run 執行爬蟲程式*     @param depth 深度 預設2*     @return void*/class crawl{public $callcontent = ‘getcontent‘;  #  擷取給定url頁面中的內容的回呼函數public $calltodo = ‘todo‘;  #  處理商務邏輯的回呼函數 如:把抓取到的內容處理後存到資料庫private $url;  #  內部屬性:當前處理中的url/* @desc:內部方法,調用回呼函數擷取頁面內容 @param url 傳入到回呼函數的參數 @return ret 頁面內容 */private function getcontent($url){    $callback = $this->callcontent;    $ret = call_user_func($callback,$url);    return $ret;}/* @desc:內部方法,調用回呼函數進行業務處理 @param content 傳入到回呼函數的參數 */private function todo($content){    $callback = $this->calltodo;    call_user_func($callback,$content);}/* @desc:內部方法,擷取頁面中的超連結 @param content 頁面內容 @return urls 擷取到的超連結 */private function geturl($content){    $preg = ‘/<[a|A].*?href=[\‘\"]{0,1}([^>\‘\"\ ]*).*?>/‘;    $bool = preg_match_all($preg,$content,$res);    $urls = array();    if($bool){        $urls = $res[1];    }    $urls = array_unique($urls);    return $urls;}/* @desc:內部方法,修複不完整的url @param url 原始url @param url 修複好的url */private function reviseurl($url){    $info = parse_url($url);    $scheme = $info["scheme"]?:‘http‘;    $user = $info["user"];    $pass = $info["pass"];    $host = $info["host"];    $port = $info["port"];    $path = $info["path"];    $url = $scheme . ‘://‘;    if ($user && $pass) {        $url .= $user . ":" . $pass . "@";    }    $url .= $host;    if ($port) {        $url .= ":" . $port;    }     $url .= $path;    return $url;}/* @desc:構造方法,初始化url */public function __construct($url){    $this->url = $url;}/* @desc:主方法,執行程式 @param depth 挖掘深度 預設2 */public function run($depth = 2){    $url = $this->url;    if($depth > 0){        $depth--;        $content = $this->getcontent($url);        // 業務處理開始        $this->todo($content);        // 業務處理結束        $urls = $this->geturl($content);        $url = $this->reviseurl($url);        if (is_array($urls) && !empty($urls)) {            foreach ($urls as $u) {                if (preg_match(‘/^http/‘, $u)) {                    $returl = $u;                } else {                    $real = $url . ‘/‘ . $u;                    $returl = $real;                }                $crawl = new crawl($returl);                $crawl->run($depth);            }        }    }}}
  • 測試:
    $crawl = new crawl(‘www.baidu.com‘);$crawl->run();/*@desc:擷取內容的回調*/function getcontent($url){$http = new http($url);$ret = $http->get()->run();return $ret;}/*@desc:處理商務邏輯的回調*/function todo($content){echo ‘執行內容‘.PHP_EOL;}
  • 輸出:
    執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容執行內容
  • php單線程爬蟲類

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.