如何使用代理IP進行資料抓取,PHP爬蟲抓取亞馬遜商品資料

yiniuyun0發表於2019-05-15

什麼是代理?什麼情況下會用到代理IP? 代理伺服器(Proxy Server),其功能就是代使用者去取得網路資訊,然後返回給使用者。形象的說:它是網路資訊的中轉站。通過代理IP訪問目標站,可以隱藏使用者的真實IP。 比如你要抓取一個網站資料,該網站有100萬條內容,他們做了IP限制,每個IP每小時只能抓1000條,如果單個IP去抓因為受限,需要40天左右才能採集完,如果用了代理IP,不停的切換IP,就可以突破每小時1000條的頻率限制,從而提高效率。

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

代理IP有開放代理也有私密代理,開放代理是全網掃描而來的,不穩定,不適合爬蟲,如果自己隨便用用還好。用爬蟲抓資料,最好使用私密代理。私密代理網上有很多提供商,穩定性參差不齊,現在我們公司使用的是“億牛雲”提供的私密代理。 我們公司有個專案是抓取亞馬遜資料來進行分析銷量、評論等,用PHP進行抓取,抓取亞馬遜要特別注意header頭,否則輸出的資料就是空了。我們之前是使用的其他家代理的api模式的,但是自己管理ip池覺得很麻煩,所以選擇了億牛雲提供的爬蟲代理,動態轉發模式的,不需要我們自己管理ip池,直接進行資料採集,這很方便也節約了很多時間。

    $url = "https://www.amazon.com/dp/B01H2S9F6C";
    $urls = "https://httpbin.org/ip";

    define("PROXY_SERVER", "tcp://t.16yun.cn:31111");

    define("PROXY_USER", "16YUN123");
    define("PROXY_PASS", "123456");

    $proxyAuth = base64_encode(PROXY_USER . ":" . PROXY_PASS);

    $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);
    print($urls);
    $context = stream_context_create($options);
    $result = file_get_contents($urls, false, $context);
    var_dump($result);?>

相關文章