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

Python爬虫实战——付费代理的使用Python 爬虫防反爬的手段 用代理 IP 实现

大家好,欢迎来到IT知识分享网。

付费代理的使用

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

  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。

参数说明表

参数 是否必填 参数说明 取值说明
secret_id 订单SecretId https://www.kuaidaili.com/uc/api/secret
sign_type 签名验证方式。目前支持token和hmacsha1。 默认值:token
signature 请求签名,用来验证此次请求的合法性。此接口默认需要验证签名 支持2种签名验证方式,签名计算方法参见https://www.kuaidaili.com/doc/api/auth/
timestamp 当前 UNIX 时间戳(秒级),可记录发起 API 请求的时间。sign_type=hmacsha1时此参数为必填项。 例如,如果与当前时间相差过大,会引起签名过期错误。
nonce 随机正整数,与 timestamp 联合起来,用于防止重放攻击。建议携带此参数进一步提升API安全性。sign_type=hmacsha1时此参数有效。 客户自行生成随机正整数,如random.randint(1, )
num 提取数量 例如:100
area 按地区筛选ip,支持按 省/市 筛选仅支持按IP付费订单 多个地区用英文逗号分隔,如 成都,济南(支持填写https://www.kuaidaili.com/doc/dev/china_area_code/)
area_ex 排除某些地区的ip,支持按 省/市 排除仅支持按IP付费订单 多个地区用英文逗号分隔,如 成都,济南(支持填写https://www.kuaidaili.com/doc/dev/china_area_code/)
ipstart 筛选以特定部分开头的IP(多个IP段用英文逗号分隔) 比如: 120.52.
ipstart_ex 排除以特定部分开头的IP(多个IP段用英文逗号分隔) 比如: 120.52.
pt 提取的代理ip类型 1: http代理(默认)2: socks代理
st 按稳定使用时长筛选ip这个时长是从提取时算起可稳定使用的时间此参数只对均匀提取30~60分钟版有效 0: 不筛选(默认)1~50: 自定义时长(单位: 分钟)
f_loc 提取结果包含地区信息 取值固定为1
f_citycode 提取结果包含地区编码(参见https://www.kuaidaili.com/doc/dev/china_area_code/) 取值固定为1
f_et 提取结果包含此代理从提取时算起的可用时间(单位:秒) 取值固定为1
f_carrier新 提取结果包含运营商信息 取值固定为1
dedup 过滤今天提取过的IP不带此参数代表不过滤 取值固定为1
format 接口返回内容的格式 text: 文本格式(默认)json: json格式xml : xml格式
sep 提取结果列表中每个结果的分隔符 1: \r\n分隔(默认)2: \n分隔3: 空格分隔4: \
carrier 筛选ip运营商此参数仅支持按IP付费订单 0: 不筛选(默认)1: 联通2: 电信3: 移动

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

返回内容中字段的说明

参数 说明
code 返回码。取值:0代表成功 非0代表失败
msg 错误信息
data 包含接口返回的数据
data.proxy_list 返回的代理ip列表
data.count 返回的代理ip数量
data.dedup_count 返回的不重复的代理ip数量(按IP付费、包年包月集中提取订单专有)
data.order_left_count 订单剩余提取余额(按IP付费订单专有)
data.today_left_count 今天剩余提取余额(包年包月集中提取订单专有)

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

Screenshot 2024-04-02 at 09.42.25

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

Screenshot 2024-04-02 at 10.00.38

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

Screenshot 2024-04-02 at 10.08.47

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

(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/,购买之后进入个人中心可以看到如下图所示画面:

Screenshot 2024-04-02 at 11.22.21

其中显示隧道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 = 't430' 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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141207.html

(0)
上一篇 2025-05-21 14:33
下一篇 2025-05-21 14:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信