溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中付費(fèi)代理詳?shù)膶?duì)比

發(fā)布時(shí)間:2020-08-05 15:04:15 來(lái)源:億速云 閱讀:207 作者:小新 欄目:編程語(yǔ)言

小編給大家分享一下Python中付費(fèi)代理詳?shù)膶?duì)比,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

前言

隨著大數(shù)據(jù)時(shí)代的到來(lái),爬蟲(chóng)已經(jīng)成了獲取數(shù)據(jù)的必不可少的方式,做過(guò)爬蟲(chóng)的想必都深有體會(huì),爬取的時(shí)候莫名其妙 IP 就被網(wǎng)站封掉了,畢竟各大網(wǎng)站也不想自己的數(shù)據(jù)被輕易地爬走。

對(duì)于爬蟲(chóng)來(lái)說(shuō),為了解決封禁 IP 的問(wèn)題,一個(gè)有效的方式就是使用代理,使用代理之后可以讓爬蟲(chóng)偽裝自己的真實(shí) IP,如果使用大量的隨機(jī)的代理進(jìn)行爬取,那么網(wǎng)站就不知道是我們的爬蟲(chóng)一直在爬取了,這樣就有效地解決了反爬的問(wèn)題。

那么問(wèn)題來(lái)了,使用什么代理好呢?這里指的代理一般是 HTTP 代理,主要用于數(shù)據(jù)爬取。現(xiàn)在打開(kāi)搜索引擎一搜 HTTP 代理,免費(fèi)的、付費(fèi)的太多太多品牌,我們?cè)撊绾芜x擇呢?看完這一篇文章,想必你心中就有了答案。

對(duì)于免費(fèi)代理,其實(shí)想都不用想了,可用率能超過(guò) 10% 就已經(jīng)是謝天謝地了。真正靠譜的代理還是需要花錢買的,那這么多家到底哪家可用率高?哪家響應(yīng)速度快?哪家比較穩(wěn)定?哪家性價(jià)比比較高?為此,我對(duì)市面上比較流行的多家付費(fèi)代理針對(duì)可用率、爬取速度、爬取穩(wěn)定性、價(jià)格、安全性、請(qǐng)求限制等做了詳細(xì)的評(píng)測(cè),讓我們來(lái)一起看一下到底哪家更強(qiáng)!

測(cè)評(píng)范圍

免費(fèi)代理

在這里我主要測(cè)試的是付費(fèi)代理,免費(fèi)代理可用率太低,幾乎不會(huì)超過(guò) 10%,但為了作為對(duì)比,我選取了西刺免費(fèi)代理進(jìn)行了測(cè)試。

付費(fèi)代理

付費(fèi)代理我選取了站大爺、芝麻 HTTP 代理、太陽(yáng) HTTP 代理、訊代理、快代理、蘑菇代理、阿布云代理、全網(wǎng)代理、云代理、大象代理、多貝云進(jìn)行了對(duì)比評(píng)測(cè),購(gòu)買了他們的各個(gè)不同級(jí)別的套餐使用同樣的網(wǎng)絡(luò)環(huán)境進(jìn)行了測(cè)評(píng),詳情如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

注:其中蘑菇代理、太陽(yáng) HTTP 代理、芝麻 HTTP 代理的默認(rèn)版表示此網(wǎng)站只有這一種代理,不同套餐僅是時(shí)長(zhǎng)區(qū)別,代理質(zhì)量沒(méi)有差別。

嗯,我把上面的套餐全部買了一遍,以供下面的評(píng)測(cè)使用。

測(cè)評(píng)目標(biāo)

本次測(cè)評(píng)主要分析代理的可用率、響應(yīng)速度、穩(wěn)定性、價(jià)格、安全性、使用頻率等因素,下面我們來(lái)一一進(jìn)行說(shuō)明。

可用率

可用率就是提取的這些代理中可以正常使用的比率。假如我們無(wú)法使用這個(gè)代理請(qǐng)求某個(gè)網(wǎng)站或者訪問(wèn)超時(shí),那么就代表這個(gè)代理不可用,在這里我的測(cè)試樣本大小為 500,即提取 500 個(gè)代理,看看里面可用的比率多少。

響應(yīng)速度

響應(yīng)速度可以用耗費(fèi)時(shí)間來(lái)衡量,即計(jì)算使用這個(gè)代理請(qǐng)求網(wǎng)站一直到得到響應(yīng)所耗費(fèi)的時(shí)間。時(shí)間越短,證明代理的響應(yīng)速度越快,這里同樣是 500 個(gè)樣本,計(jì)算時(shí)只對(duì)正??捎玫拇碜鼋y(tǒng)計(jì),計(jì)算耗費(fèi)時(shí)間的平均值。

穩(wěn)定性

由于爬蟲(chóng)時(shí)我們需要使用大量代理,如果一個(gè)代理響應(yīng)速度特別快,很快就能得到響應(yīng),而下一次請(qǐng)求使用的代理響應(yīng)速度特別慢,等了三十秒才得到響應(yīng),那勢(shì)必會(huì)影響爬取效率,所以我們需要看下商家提供的這些代理穩(wěn)定性怎樣,總不能這一個(gè)特別快,下一個(gè)又慢的不行。所以這里我們需要統(tǒng)計(jì)一下耗費(fèi)時(shí)間的方差,方差越大,證明穩(wěn)定性越差。

價(jià)格

價(jià)格,這個(gè)當(dāng)然是需要考慮的內(nèi)容,如果一個(gè)代理不論是響應(yīng)速度還是穩(wěn)定性都特別不錯(cuò),但是價(jià)格非常非常高,這也是不可接受的。

安全性

這的確也是需要考慮的因素,比如一旦不小心把代理提取的 API 泄露出去了,別人就肆意使用我們的 API 提取代理使用,而一直耗費(fèi)的是我們的套餐。另外一旦別人通過(guò)某些手段獲取了我們的代理列表,而這些代理是沒(méi)有安全驗(yàn)證的,這也會(huì)導(dǎo)致別人偷偷使用我們的代理。在生產(chǎn)環(huán)境上,這方面尤其需要注意。

使用頻率

有些代理套餐在 API 調(diào)用提取代理時(shí)有頻率限制,有的代理套餐則會(huì)限制請(qǐng)求頻率,這些因素都會(huì)或多或少影響爬蟲(chóng)的效率,這部分因素我們也需要考慮進(jìn)來(lái)。

測(cè)評(píng)標(biāo)準(zhǔn)

要做標(biāo)準(zhǔn)的測(cè)評(píng),那就必須在標(biāo)準(zhǔn)的測(cè)評(píng)環(huán)境下進(jìn)行,且盡可能排除一些雜項(xiàng)的干擾,如網(wǎng)絡(luò)波動(dòng)、傳輸延遲等一系列的影響。

主機(jī)選取

由于我的個(gè)人筆記本是使用 WiFi 上網(wǎng)的,所以可能會(huì)有網(wǎng)絡(luò)波動(dòng),而且實(shí)際帶寬其實(shí)并不太好把控,因此它并不適合來(lái)做標(biāo)準(zhǔn)評(píng)測(cè)使用。評(píng)測(cè)需要在一個(gè)網(wǎng)絡(luò)穩(wěn)定的條件下進(jìn)行,而且多個(gè)代理的評(píng)測(cè)環(huán)境必須相同,在此我選擇了一臺(tái)騰訊云主機(jī)作為測(cè)試,主機(jī)配置如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

這樣我們就可以保證一個(gè)標(biāo)準(zhǔn)統(tǒng)一的測(cè)試環(huán)境了。

現(xiàn)取現(xiàn)測(cè)

另外在評(píng)測(cè)時(shí)還需要遵循一個(gè)原則,那就是現(xiàn)取現(xiàn)測(cè),即取一個(gè)測(cè)一個(gè)。現(xiàn)在很多付費(fèi)代理網(wǎng)站都提供了 API 接口,我們可以一次性提取多個(gè)代理,但是這樣會(huì)導(dǎo)致一個(gè)問(wèn)題,每個(gè)代理在提取出來(lái)的時(shí)候,商家是會(huì)盡量保證它的可用性的,但過(guò)一段時(shí)間,這個(gè)代理可能就不好用了,所以假如我們一次性提取出來(lái)了 100 個(gè)代理,但是這 100 個(gè)代理并沒(méi)有同時(shí)參與測(cè)試,后面的代理就會(huì)經(jīng)歷一個(gè)的等待期,過(guò)一段時(shí)間再測(cè)這些代理的話,肯定會(huì)影響后半部分代理的有效性,所以這里我們將提取的數(shù)量統(tǒng)一設(shè)置成 1,即請(qǐng)求一次接口獲取一個(gè)代理,然后立即進(jìn)行測(cè)試,這樣可以保證測(cè)試的公平性,排除了不同代理有效期的干擾。

時(shí)間計(jì)算

由于我們有一項(xiàng)是測(cè)試代理的響應(yīng)速度,所以我們需要計(jì)算程序請(qǐng)求之前和得到響應(yīng)之后的時(shí)間差,這里我們使用的測(cè)試 Python 庫(kù)是 requests,所以我們就計(jì)算發(fā)起請(qǐng)求和得到響應(yīng)之間的時(shí)間差即可,時(shí)間計(jì)算方法如下所示:

start_time = time.time()
requests.get(test_url, timeout=timeout, proxies=proxies)
end_time = time.time()
used_time = end_time - start_time

這里 used_time 就是使用代理請(qǐng)求的耗時(shí),這樣測(cè)試的就僅僅是發(fā)起請(qǐng)求到得到響應(yīng)的時(shí)間。

測(cè)試鏈接

測(cè)試時(shí)我們也需要使用一個(gè)穩(wěn)定的且沒(méi)有反爬蟲(chóng)的鏈接,這樣可以排除服務(wù)器的干擾,這里我們使用百度來(lái)作為測(cè)試目標(biāo)。

超時(shí)限制

在測(cè)試時(shí)免不了的會(huì)遇到代理請(qǐng)求超時(shí)的問(wèn)題,所以這里我們也需要統(tǒng)一一個(gè)超時(shí)時(shí)間,這里設(shè)置為 60 秒,如果使用代理請(qǐng)求百度,60 秒還沒(méi)有得到響應(yīng),那就視為該代理無(wú)效。

測(cè)試數(shù)量

要做測(cè)評(píng),那么樣本不能太小,如只有十幾次測(cè)試是不能輕易下結(jié)論的,這里我選取了一個(gè)適中的測(cè)評(píng)數(shù)量 500,即每個(gè)套餐獲取 500 個(gè)代理進(jìn)行測(cè)試。

測(cè)評(píng)過(guò)程

嗯,測(cè)評(píng)過(guò)程這邊主要說(shuō)一下測(cè)評(píng)的代碼邏輯,首先測(cè)的時(shí)候是取一個(gè)測(cè)一個(gè)的,所以這里定義了一個(gè) test_proxy() 方法:

test_url = 'https://www.baidu.com/'
timeout = 60
def test_proxy(proxy):
    try:
        proxies = {
            'https': 'http://' + proxy
        }
        start_time = time.time()
        requests.get(test_url, timeout=timeout, proxies=proxies)
        end_time = time.time()
        used_time = end_time - start_time
        print('Proxy Valid', 'Used Time:', used_time)
        return True, used_time
    except (ProxyError, ConnectTimeout, SSLError, ReadTimeout, ConnectionError):
        print('Proxy Invalid:', proxy)
        return False, None

這里需要傳入一個(gè)參數(shù) proxy,代表一個(gè)代理,即 IP 加端口組成的代理,然后這里使用了 requests 的 proxies 參數(shù)傳遞給 get() 方法。對(duì)于代理無(wú)效的檢測(cè),這里判斷了 ProxyError, ConnectTimeout, SSLError, ReadTimeout, ConnectionError 這幾種異常,如果發(fā)生了這些異常統(tǒng)統(tǒng)視為代理無(wú)效,返回錯(cuò)誤。如果在 timeout 60 秒內(nèi)得到了響應(yīng),那么就計(jì)算其耗費(fèi)時(shí)間并返回。

在主程序里,就是獲取 API 然后統(tǒng)計(jì)結(jié)果了,代碼如下:

max = 500
def main():
    print('Testing')
    used_time_list = []
    valid_count = 0
    total_count = 0
    while True:
        flag, result = get_page(api_url)
        if flag:
            proxy = result.strip()
            if is_proxy(proxy):
                total_count += 1
                print('Testing proxy', proxy)
                test_flag, test_result = test_proxy(proxy=proxy)
                if test_flag:
                    valid_count += 1
                    used_time_list.append(test_result)
                stats_result(used_time_list, valid_count, total_count)
        time.sleep(wait)
        if total_count == max:
            break

這里加了一些判斷,如 is_proxy() 方法判斷了獲取的是不是符合有效的代理規(guī)則,即判斷它是不是 IP 加端口的形式,這樣可以排除 API 返回一些錯(cuò)誤信息的干擾。另外這里設(shè)置了 total_count 和 valid_count 變量,只有符合代理規(guī)則的代理參與了測(cè)試,這樣才算一次有效測(cè)試,total_count 加一,如果測(cè)試可用,那么 valid_count 加一并記錄耗費(fèi)時(shí)間。最后調(diào)用了 stats_results 方法進(jìn)行了統(tǒng)計(jì):

import numpy as np
def stats_result(used_time_list, valid_count, total_count):
    if not used_time_list or not total_count:
        return
    used_time_array = np.asarray(used_time_list, np.float32)
    print('Total Count:', total_count,
          'Valid Count:', valid_count,
          'Valid Percent: %.2f%%' % (valid_count * 100.0 / total_count),
          'Used Time Mean:', used_time_array.mean(),
          'Used Time Var', used_time_array.var())

這里使用了 Numpy 來(lái)統(tǒng)計(jì)了耗費(fèi)時(shí)間的均值和方差,分別反映代理的響應(yīng)速度和穩(wěn)定性。

嗯,就這樣,利用這個(gè)方法我對(duì)各個(gè)不同的代理套餐逐一進(jìn)行了測(cè)試。

測(cè)評(píng)結(jié)果

經(jīng)過(guò)測(cè)評(píng),初步得到如下統(tǒng)計(jì)結(jié)果:

Python中付費(fèi)代理詳?shù)膶?duì)比

注:

·表中的響應(yīng)時(shí)間方差越大,代表穩(wěn)定性越低。

·阿布云代理經(jīng)典版方差較小是因?yàn)樗情L(zhǎng)時(shí)間鎖定了同一個(gè) IP,因此極其穩(wěn)定,但每秒最大請(qǐng)求默認(rèn) 5 次。

·多貝云代理套餐一二方差較小是因?yàn)樗情L(zhǎng)時(shí)間鎖定了同一個(gè) IP,因此極其穩(wěn)定,但每秒最大請(qǐng)求默認(rèn) 20 次。

測(cè)評(píng)分析

下面我們將從各個(gè)方面分析一下各個(gè)套餐的優(yōu)劣。

可用率

通過(guò)可用率統(tǒng)計(jì),我們可以發(fā)現(xiàn)可用率較高的代理套餐有:

Python中付費(fèi)代理詳?shù)膶?duì)比

響應(yīng)速度

通過(guò)平均響應(yīng)速度判別,我們可以發(fā)現(xiàn)響應(yīng)速度較快的代理套餐有:

Python中付費(fèi)代理詳?shù)膶?duì)比

穩(wěn)定性

通過(guò)平均響應(yīng)速度方差分析,我們可以發(fā)現(xiàn)穩(wěn)定性較高的代理套餐有:

Python中付費(fèi)代理詳?shù)膶?duì)比

價(jià)格

我們可以先看一下各個(gè)套餐的價(jià)格:

Python中付費(fèi)代理詳?shù)膶?duì)比

Python中付費(fèi)代理詳?shù)膶?duì)比

按照包月的價(jià)格,我們可以統(tǒng)一對(duì)比如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

安全性

對(duì)于安全性,此處主要考慮提取 API 是否有訪問(wèn)驗(yàn)證,使用代理時(shí)是否有訪問(wèn)驗(yàn)證,即可以通過(guò)設(shè)置白名單來(lái)控制哪些可以使用。

其中只有芝麻 HTTP 代理、太陽(yáng) HTTP 代理默認(rèn)使用了白名單限制,即只有將使用 IP 添加到白名單才可以使用,可以有效控制使用權(quán)限。

另外阿布云代理提供了隧道代理驗(yàn)證,只有成功配置了用戶名和密碼才可以正常使用。

所以在此歸納如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

調(diào)取頻率

不同的接口具有不同的 API 調(diào)用頻率限制,歸納如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

在此可以簡(jiǎn)單總結(jié)如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

特色功能

除了常規(guī)的測(cè)試之外,我這邊還選取了某些套餐的與眾不同之處進(jìn)行說(shuō)明,這些特點(diǎn)有的算是缺點(diǎn),有的算是優(yōu)點(diǎn),現(xiàn)列舉如下:

Python中付費(fèi)代理詳?shù)膶?duì)比

測(cè)評(píng)綜合

分項(xiàng)了解了各個(gè)代理套餐的可用率、響應(yīng)速度、穩(wěn)定性、性價(jià)比、安全性等內(nèi)容之后,最后做一下總結(jié):

Python中付費(fèi)代理詳?shù)膶?duì)比

Python中付費(fèi)代理詳?shù)膶?duì)比

所以在綜合來(lái)看比較推薦的有:芝麻代理、訊代理、阿布云、多貝云代理,詳細(xì)的對(duì)比結(jié)果可以參照表格。

看完了這篇文章,相信你對(duì)Python中付費(fèi)代理詳?shù)膶?duì)比有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI