最近看到微信羣裏大家有在聊關於文書網的數據獲取,這個網站一直都是比較難訪問的,數據的獲取更是不容易。所以我們今天就根據這個網站來進行一次分析,分享交流下這種類型的網站該如何去獲取數據。
這裏重點討論下文書網的反爬機制,由於文書網的反爬監控很嚴格(一級驗證碼,二級驗證碼,js反爬,IP檢測)每樣反爬阻礙都是不好應對的,但是也是有解決方法的,比如網站的ip檢測,我們就可以採用億牛雲爬蟲代理加強版方案,每一次request請求都是不同的IP,這樣就不會觸發反爬檢測了。主要是ip質量好,ip池足夠大,基本上每個IP都可以用,而且使用方式還很方便,直接用它的代理服務器發出請求,不用像傳統api模式那樣還需要取出IP,再代入IP進行請求。
速度配置:我們在程序裏面配置的是5個線程,;因爲我用的代理配置是基礎的每秒5個請求數,所以在此設置線程數爲5,如果想爬取更快,獲取更多的數據。可以加大代理請求數,最高可以加到300的請求數,我滴天呀,那得多快啊,那些需要爬幾千萬數據的不是隻要幾天就搞定了嗎。
<?php // 要訪問的目標頁面 $url = "http://httpbin.org/ip"; $urls = "https://httpbin.org/ip"; // 代理服務器(產品官網 www.16yun.cn) define("PROXY_SERVER", "tcp://t.16yun.cn:31111"); // 代理身份信息 define("PROXY_USER", "username"); define("PROXY_PASS", "password"); $proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS); // 設置 Proxy tunnel $tunnel = rand(1,10000); $headers = implode("\r\n", [ "Proxy-Authorization: Basic {$proxyAuth}", "Proxy-Tunnel: ${tunnel}", ]); $sniServer = parse_url($urls, PHP_URL_HOST); $options = [ "http" => [ "proxy" => PROXY_SERVER, "header" => $headers, "method" => "GET", 'request_fulluri' => true, ], 'ssl' => array( 'SNI_enabled' => true, // Disable SNI for https over http proxies 'SNI_server_name' => $sniServer ) ]; print($url); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); var_dump($result); // 訪問 HTTPS 頁面 print($urls); $context = stream_context_create($options); $result = file_get_contents($urls, false, $context); var_dump($result); ?> curl GuzzleHttp
總結,如果以上的分享對家有幫助大家就分享學習下,大家有更好的方案也可以留言交流呀!