付费代理的使用

相对免费代理,付费代理的稳定性更高,毕竟花钱了嘛 😀。

  1. 付费代理的分类

按照使用流程,可以大致将付费代理分为两类。

  • 一类代理商提供代理提取接口的付费代理,我们可以通过接口获取这类代理组成的列表,这类代理的地址的IP和端口都是可见的,想用哪个就用哪个。这种代理一般会按时间或者按量收费,比较有代表性的这类代理有快代理(https://www.kuaidaili.com/)、芝麻代理(http://www.zhimaruanjian.com/)和多贝云代理(http://www.dobel.cn/)等。
  • 另一类是代理商搭建了隧道代理的付费代理,我们可以直接把此类代理设置为固定的IP和端口,无须进一步通过请求接口获取随机代理并设置。这种情况,只需要知道一个固定的代理服务器地址即可,代理商会负责维护背后的整个代理池,因此开发者使用起来更加方便,但这样就无法自由控制设置哪个代理IP了。比较有代表性的这类代理有阿布云代理(https://www.abuyun.com/)、快代理(https://www.kuaidaili.com)和多贝云代理(http://www.dobel.cn/)等。
  1. 通过接口提取代理

以快代理为例演示通过接口获取代理并使用的方法,需要先到快代理的官网注册一个账号并购买对应的套餐。测试目的,所以购买的是私密代理套餐,类似的套餐还有开放代理和独享代理。私密代理的介绍链接为https://www.kuaidaili .com/doc/product/dps/,私密代理提取接口的说明链接为https://www.kuaidaili.com/doc/api/getdps/,接口地址为http://dps.kdlapicom/api/getdps。

参数说明表

可以看到,支持指定的内容还是比较多的,例如提取数量、地区、代理类型和过滤条件等。接口可返回文本格式、JSON格式或XML格式等内容,对返回内容中字段的说明如下表所示。

返回内容中字段的说明

好, 基本的请求参数和返回结果我们已经搞清楚了,下面实践看看。购买相应的套餐之后,可以在订单页面找到对应的订单号,例如我的订单号是971202206161740,如图所示:

Python爬虫实战——付费代理的使用-LMLPHP

然后点击“生成API链接”选项,即可跳转到快代理提供的 提取页面,这里它已经准备好了操作界面,通过点选就可以配置参数了。如下图所示,把提取数量设为10,代理类型选http/https,返回格式选json(你可以根据自己的需求选择其他格式),其他选项均保持默认,最后点击底部的“生成链接”按钮。

Python爬虫实战——付费代理的使用-LMLPHP

之后会看到生成了一个API链接,这里我生成的API链接为https://dps.kdlapi.com/api/getdps/?secret_id=oamkmkjicp7gwzjnyecr&signature=7040oo1t3bzrmdaqvduhgvolvj6me77p&num=10&pt=1&format=json&sep=1&dedup=1。直接访问就可以看到了代理数据了,一共是10个,如下图所示:

Python爬虫实战——付费代理的使用-LMLPHP

这些就是可用的代理了。为了防止代理被滥用,快代理设置了白名单机制:

(1)需要设置IP白名单或用户名密码才能使用私密代理;

(2)IP白名单和用户名密码最好二选一,如果使用用户名密码访问,请不要设置IP白名单。

本人使用的是IP白名单。以上流程完成以后,代码实现一下,测试图中的IP是否可用:

import requests
import json

PROXY_API = '<https://dps.kdlapi.com/api/getdps/?secret_id=oamkmkjicp7gwzjnyecr&signature=7040oo1t3bzrmdaqvduhgvolvj6me77p&num=10&pt=1&format=json&sep=1&dedup=1>'

def get_proxies():
    response = requests.get(PROXY_API)
    return json.loads(response.text)

def test_proxies():
    proxies = get_proxies()['data']['proxy_list']
    for proxy in proxies:
        proxy = proxy.strip()
        print(f'using proxy {proxy}')
        try:
            response = requests.get('<http://www.httpbin.org/ip>', proxies={'http': 'http://'+proxy,})
            print(response.text)
        except requests.ConnectionError:
            print(f'proxy {proxy} is invalid')

if __name__ == '__main__':
    test_proxies()

首先声明一个PROXY_API,就是获取的提取代理的API链接,然后使用get_proxies方法请求了这个API,会返回由可用代理组成的json数据,然后获取可用代理组成的列表。接着,我们在test_proxies方法里直接调用requests的get方法请求了http://www.httpbin.org/ip,会返回发出请求的真实IP地址,代理我们是通过proxies参数设置的。运行结果如下:

using proxy 221.229.212.170:40713
{
  "origin": "120.208.12.56"
}

using proxy 36.40.195.157:18758
{
  "origin": "36.40.195.157"
}

using proxy 122.239.173.119:18327
{
  "origin": "122.239.173.119"
}

using proxy 119.102.153.225:16953
{
  "origin": "119.102.153.225"
}

using proxy 221.131.165.73:40668
{
  "origin": "112.192.81.10"
}
....

这样就证明我们成功使用代理请求了网站并达到了伪装真实IP的目的。

  1. 使用隧道代理

上面介绍的方法相对繁琐,隧道代理就比较简单了。隧道代理相当于服务商在云端维护了一个代理池,客户端只需设置一个固定的代理服务费,换IP的流程由服务器来完成,让用户使用的流程更简单。用户无须更换IP,隧道代理会将请求转发给不同的代理,可按需指定转发周期。

以快代理为例演示隧道代理的使用方法,首先需要购买隧道代理的套餐,链接为https://www.kuaidaili.com/doc/product/tps/,购买之后进入个人中心可以看到如下图所示画面:

Python爬虫实战——付费代理的使用-LMLPHP

其中显示隧道HOST为t45.kdltps.com,HTTP端口为15818,Socks端口20818,我们只需在请求目标网站的时候把代理设置为这个host和这个端口的组合就好了。另外,使用隧道代理需要用到用户名和密码,也在图中。这里同样需要设置白名单,接下来进行测试,代码如下:

import requests

url = '<http://www.httpbin.org/ip>'

# 代理信息
proxy_host = 't453.kdltps.com'
proxy_port = '15818'
proxy_username = 't11202809243430'
proxy_password = '9xsa44ja'

proxy = f'http://{proxy_username}:{proxy_password}@{proxy_host}:{proxy_port}'
proxies = {
    'http':proxy,
    'https': proxy,
}
for _ in range(1, 5):
    response = requests.get(url, proxies=proxies)
    print(response.text)

运行代码,结果如下:

{
  "origin": "220.178.145.27"
}

{
  "origin": "118.76.186.126"
}

{
  "origin": "119.41.192.202"
}

{
  "origin": "59.174.134.82"
}

可以看到返回了客户端IP,发现这并不是我们的真实IP,说明代理设置成功了。

这说明每次请求时代理IP是随机变化的。所以我们只需设置一个固定的隧道代理就可以实现在每次请求时自动切换IP了,使用起来更加方便。

相关知识可以在小蜜蜂AI网站获取,网址为:https://zglg.work

04-02 20:11