付费代理ip的使用

6,372 阅读6分钟

 相对免费代理来说,付费代理的稳定性更高,故本篇只介绍下市面上主流代理IP运营商的产品分类和使用。

 一、付费代理分类

付费代理分为两类: 

 一类提供接口获取海量代理,按天或者按量收费;

 一类搭建了代理隧道,直接设置固定域名代理。 

 本篇以熊猫代理网站为例,讲解这两类代理的使用方法。 

 二、熊猫代理高效代理 

 熊猫代理的代理效率很高,官网为www.xiongmaodaili.com/,如下图所示。

 熊猫代理上可供选购的代理有多种类别,包括如下几种(参考官网介绍)。

 高效代理:它适合对代理IP需求量非常大,但能接受较短代理有效时长(3~10分钟),需求灵活的客户。 

 动态代理: 每个请求随机分配一个代理IP,海量IP资源池需求,近300个区域全覆盖,它适用于爬虫类业务。 

 独享代理:它适合对代理IP稳定性要求非常高且可以自主控制的客户,支持地区筛选。 

 订制代理:如果标准套餐不能满足你的需求,还可以和客服联系订制服务,它可以灵活按照需求订制,订制IP区域,订制IP使用时长,订制IP每秒请求数。 

 一般选择第一类别高效代理即可,这种代理的量比较大,但是其稳定性不能达到100%,平均有效率在95%以上。

 如果对IP要求高就需要借助于自建代理池,自己再做一次筛选,以确保代理可用。 读者可以购买一天时长来试试效果。购买之后,熊猫代理会提供一个API来提取代理,如下图所示。

 比如,这里提取API为http://www.xiongmaodaili.com/xiongmao-web/api/glip?secret=6afacb8beadajhfjafklajfajf3234&orderNo=GL20190715478212m0ULsyulL&count=50&isTxT=0&proxyType=1,已过期,在此仅做演示。

 在这里指定了提取数量为50,提取格式为JSON,直接访问链接即可提取代理,结果如下图所示。


 接下来我们要做的就是解析这个JSON,然后将其放入代理池中。

 如果信赖熊猫代理的话,我们也可以不做代理池筛选,直接使用代理。不过我个人还是推荐使用代理池筛选,以提高代理可用几率。

 根据上一节代理池的写法,我们只需要在Crawler中再加入一个crawl开头的方法即可。方法实现如下所示:

 def crawl_xiongmaodaili(self): 
       """
        获取熊猫代理
        :return: 代理
        """
        url = 'http://www.xiongmaodaili.com/xiongmao-web/api/glip?secret=6afacb8beadajhfjafklajfajf3234&orderNo=GL20190715478212m0ULsyulL&count=50&isTxT=0&proxyType=1' 
       html = get_page(url)
        if html: 
           result = json.loads(html)
           proxies = result.get('RESULT') 
           for proxy in proxies:
                yield proxy.get('ip') + ':' + proxy.get('port')

 这样我们就在代理池中接入了熊猫代理。获取熊猫代理的结果之后,解析JSON,返回代理即可。 代理池运行之后就会抓取和检测该接口返回的代理,如果代理可用,那么分数就会被设为100,通过代理池接口即可获取到这些可用代理。

 三、熊猫代理动态代理

 熊猫代理也提供了动态代理隧道,代理速度快且非常稳定 对于爬虫来说,我们推荐使用动态产品,购买之后可以在个人中心看到订单号和secret,如下图所示。


  动态代理的并发产品代理设置为dynamic.xiongmaodaili.com:8089;按量产品需将代理设置为dynamic.xiongmaodaili.com:8088。它们均是固定的,但是每次使用之后IP都会更改,该过程其实就是利用了代理隧道实现(参考官网介绍)。

 动态代理通过代理隧道的形式提供高匿名代理服务,支持HTTP/HTTPS协议。

 动态代理在云端维护一个全局IP池供代理隧道使用,池中的IP会不间断更新,以保证同一时刻IP池中有几十到几百个可用代理IP。

 需要注意的是,动态代理会为每个请求从IP池中挑选一个随机代理IP,部分请求可能会重复由同一IP转发。

 无须切换代理IP,每一个请求分配一个随机代理IP。 HTTP代理隧道有并发请求限制,按量套餐最大允许100并发,按并发套餐默认5并发。

 注意,并发套餐默认套餐的并发请求是5个。如果需要更多请求数,则须另外购买。

 使用教程的官网链接为:[http://www.xiongmaodaili.com/help](http://www.xiongmaodaili.com/help)。教程提供了requests、urllib、Scrapy的接入方式。 现在我们以requests为例,接入代码如下所示:

#!/usr/bin/python
#coding=utf-8
# 新用户只需要替换14行和15行的orderno和secret即可运行

import sys
import time
import hashlib
import requests

_version = sys.version_info
is_python3 = (_version[0] == 3)

# 个人中心获取orderno与secret
orderno = "DT2019051422xxxxxxxxxxx"
secret = "f163c1a1cd84f2bxxxxxxxxxx"
ip = "dynamic.xiongmaodaili.com"
#按量订单端口
port = "8088"
#按并发订单端口
#port = "8089"

ip_port = ip + ":" + port

timestamp = str(int(time.time()))                # 计算时间戳
txt = ""
txt = "orderno=" + orderno + "," + "secret=" + secret + "," + "timestamp=" + timestamp

if is_python3:
    txt = txt.encode()

md5_string = hashlib.md5(txt).hexdigest()                 # 计算
signsign = md5_string.upper()                              # 转换成大写
print(sign)
auth = "sign=" + sign + "&" + "orderno=" + orderno + "&" + "timestamp=" + timestamp + "&change=true"

print(auth)
#http协议的网站用此配置
proxy = {"http":"http://" + ip_port}
#https协议的网站用此配置
#proxy = {"https": "https://" + ip_port}
print(proxy)
headers = {"Proxy-Authorization": auth,"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}
#r = requests.get("http://2019.ip138.com/ic.asp", headers=headers, proxies=proxy, verify=False,allow_redirects=False)
#r = requests.get("https://api.ip.la", headers=headers, proxies=proxy, verify=False,allow_redirects=False)print(headers)
#http协议可用性检测,每访问一次返回的结果换一个IP即为代理成功
r = requests.get("http://2019.ip138.com/ic.asp", headers=headers, proxies=proxy, verify=False,allow_redirects=False)
#https协议可用性检测,每访问一次返回的结果换一个IP即为代理成功
#r = requests.get("https://ip.cn/",headers=headers,proxies=proxy,verify=False,allow_redirects=False)print(r.encoding)print(r.apparent_encoding)
#http协议测试采用此中文编码r.encoding = 'gb2312'#https协议测试采用此中文编码
#r.encoding = 'utf-8'
print(r.encoding)
print(r.status_code)
print(r.text)
print(str(r.elapsed.total_seconds())+"     秒")

这段代码可以多次运行测试,我们发现每次请求后IP都会在变化,这就是动态版代理的效果。

 这种效果其实跟之前的代理池的随机代理效果类似,都是随机取出了一个当前可用代理。但是,与维护代理池相比,此服务的配置简单,使用更加方便,更省时省力。在价格可以接受的情况下,个人推荐此种代理。

 四、结语

 以上内容便是付费代理的相关使用方法,付费代理稳定性和可用性比免费代理更高,读者可以自行选购适合自己的代理IP产品。