php 使用代理IP進行數據抓取


什么是代理?什么情況下會用到代理IP?
代理服務器(Proxy Server),其功能就是代用戶去取得網絡信息,然后返回給用戶。形象的說:它是網絡信息的中轉站。通過代理IP訪問目標站,可以隱藏用戶的真實IP。

比如你要抓取一個網站數據,該網站有100萬條內容,他們做了IP限制,每個IP每小時只能抓1000條,如果單個IP去抓因為受限,需要40天左右才能采集完,如果用了代理IP,不停的切換IP,就可以突破每小時1000條的頻率限制,從而提高效率。

其他想切換IP或者隱藏身份的場景也會用到代理IP,比如SEO等。

代理IP有開放代理也有私密代理,開放代理是全網掃描而來的,不穩定,不適合爬蟲,如果自己隨便用用還好。用爬蟲抓數據,最好使用私密代理。私密代理網上有很多提供商,穩定性參差不齊,現在我們公司使用的是“百變IP”提供的私密代理。

我們公司有個項目是抓取亞馬遜數據來進行分析銷量、評論等,用PHP進行抓取,抓取亞馬遜要特別注意header頭,否則輸出的數據就是空了。還有一種方法,可以用PHP通過shell_exec來調用curl命令來進行抓取。

    PHP如果是使用curl函數來抓取,主要設置下面幾項即可。

    curl_setopt($ch, CURLOPT_PROXY, 'proxy.baibianip.com'); //代理服務器地址
    curl_setopt($ch, CURLOPT_PROXYPORT, '8000'); //代理服務器端口

    如果是抓取HTTPS,把下面兩項設置為false:
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //抓HTTPS可以把此項設置為false
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //抓HTTPS可以把此項設置為false
方法一:完整示例代碼如下,下面提供兩種方式來調用:
<?php

//代理ip列表
const PROXY_LIST = [
    '124.232.133.199:3128',
    '171.83.165.90:9999',
    
];

function curl_via_proxy($url,$proxy_ip,$headers = [],$user_agent = 'curl',$method = 'GET')
{
    $arr_ip = explode(':',$proxy_ip);

    $ch = curl_init($url); //創建CURL對象  
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_HEADER, 0); //返回頭部  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回信息  
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3); //連接超時時間
    curl_setopt($ch, CURLOPT_TIMEOUT, 5); //讀取超時時間
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //對認證證書來源的檢查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //從證書中檢查SSL加密算法是否存在
    curl_setopt($ch, CURLOPT_PROXY, $arr_ip[0]); //代理服務器地址
    curl_setopt($ch, CURLOPT_PROXYPORT, $arr_ip[1]); //代理服務器端口
    curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    //添加頭部信息
    if(!empty($headers)){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }


    $res = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    if ($curl_errno) {
        curl_close($ch);
        return false;
    }
    curl_close($ch);
    return $res;
}
$headers = array(
    'authority:www.amazon.com',
    'upgrade-insecure-requests:1',
    'user-agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3355.4 Safari/537.36',
    'accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'accept-encoding:gzip, deflate, br',
    'accept-language:zh-CN,zh;q=0.9,en;q=0.8',
);
$url = 'https://api.apiopen.top/recommendPoetry';
var_dump(curl_via_proxy($url,PROXY_LIST[array_rand(PROXY_LIST,1)],$headers));
die;

 方式二:利用PHP調用Linux的curl命令來進行抓取,Windows下下載curl.exe即可。

$html = shell_exec("curl -x 'proxy.baibianip.com:8000' 'http://www.baidu.com' --connect-timeout 3 -m 5");
echo $html;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM