1. 程式人生 > >我是怎樣把反反爬蟲把數據爬下來的

我是怎樣把反反爬蟲把數據爬下來的

ie 6 nav 解決 讓我 tom safari 判斷 head 5.0

  最近看到公司的商務一條一條的從某個網站上復制數據到excel裏,於是乎就打算寫個爬蟲把那個網站的數據都爬下來.一般的流程是模擬用戶訪問->獲取數據->解析頁面元素->balabala想幹啥幹啥.但這個網站大概是知道自己對爬蟲很有吸引力,於是做了反爬蟲的處理.查看返回的數據有一段這樣的代碼:

void(function fuckie6(){if(location.hash && /MSIE 6/.test(navigator.userAgent) && !/jsl_sec/.test(location.href)){location.href = location.href.split(‘#‘)[0] + ‘&jsl_sec‘ + location.hash}})();
var content = _.template(document.getElementById(‘content_tpl‘).innerHTML)({ error_403: ‘當前訪問因疑似CC攻擊,已被雲防禦攔截‘ || ‘當前訪問疑似黑客攻擊,已被網站管理員設置為攔截‘, url: document.URL.replace(/\</g,"%3C").replace(/\>/g,"%3E"), user_agent: navigator.userAgent, now: new Date(new Date() - -8 * 3600000).toISOString().substr(0, 19).replace(‘T‘, ‘ ‘), rule_id: parseInt(
‘<!--RULE_ID-->‘.replace(/\[|\]/g, ‘‘)) || ‘‘, from: encodeURIComponent(document.referrer.substr(0, 1024)), client_ip: ‘183.14.132.72‘, ref: encodeURIComponent(document.URL.substr(0, 1024)) }); document.getElementById(‘content_rendered‘).innerHTML = content;

不是很明白為什麽要把攔截情況用js來處理,也有可能是通過js來攔截爬蟲.總之讓我感覺他是通過判斷訪問的客戶端類型(userAgent)來反爬蟲,這樣就很好解決了.curl代碼如下:

//欺騙服務端,隱藏自己的客戶端
    public function liar($url)
    {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "GET"
        ));
        //偽造ip以及客戶端
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(‘X-FORWARDED-FOR:111.222.333.4‘, ‘CLIENT-IP:111.222.333.4‘));
        curl_setopt($curl, CURLOPT_REFERER, "http://www.test.com");
        curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11");
        $response = curl_exec($curl);
        curl_close($curl);
        return $response;
    }

CURLOPT_USERAGENT這個值可以偽造客戶端類型,這次程序中我把自己偽造成了Mozilla,同時怕對方攔截到我的ip而設置黑名單所以也設置了訪問ip以及來路頁面.這些應該是初級反反爬蟲技術,不過可以爬下大部分的網站了.
拿到數據後,用simple_html_dom類來解析數據,具體就不放出啦~跟jq很相似的使用方法.爬下的數據,想用phpexcel導出,想存到數據庫隨便啦~

我是怎樣把反反爬蟲把數據爬下來的