付费代理的使用

相对免费代理来说,付费代理的稳定性更高。本节将介绍爬虫付费代理的相关使用过程。

一、付费代理分类

付费代理分为两类:

  • 一类提供接口获取海量代理,按天或者按量收费,如讯代理;
  • 一类搭建了代理隧道,直接设置固定域名代理,如阿布云代理。

本节分别以两家代表性的代理网站为例,讲解这两类代理的使用方法,

二、讯代理

讯代理的代理效率较高(作者亲测),官网为http://www.xdaili.cn/,如下图所示。

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

  • 优质代理:它适合对代理IP需求量非常大,但能接受较短代理有效时长(10~30分钟)的小部分不稳定的客户。
  • 独享动态:它适合对代理IP稳定性要求非常高且可以自主控制的客户,支持地区筛选。
  • 独享秒切:它适合对代理IP稳定性要求非常高且可以自主控制的客户,可快速获取IP,地区随机分配。
  • 动态混拨: 它适合对代理IP需求量大、代理IP使用时效短(3分钟)、切换快的客户。
  • 优质定制:如果优质代理的套餐不能满足你的需求,请使用定制服务。

一般选择第一类别优质代理即可,这种代理的量比较大,但是其稳定性不高,一些代理不可用。所以这种代理的使用就需要借助于上一节所说的代理池,自己再做一次筛选,以确保代理可用。

读者可以购买一天时长来试试效果。购买之后,讯代理会提供一个API来提取代理,如下图所示。

比如,这里提取API为http://www.xdaili.cn/ipagent/greatRecharge/getGreatIp?spiderId=da289b78fec24f19b392e04106253f2a&orderno=YZ20177140586mTTnd7&returnType=2&count=20,可能已过期,在此仅做演示。

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

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

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

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

def crawl_xdaili(self):
        """
        获取讯代理
        :return: 代理
        """
        url = 'http://www.xdaili.cn/ipagent/greatRecharge/getGreatIp?spiderId=da289b78fec24f19b392e04106253f2a&orderno=YZ20177140586mTTnd7&returnType=2&count=20'
        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,通过代理池接口即可获取到这些可用代理。

三、阿布云代理

阿布云代理提供了代理隧道,代理速度快且非常稳定,其官网为https://www.abuyun.com/,如下图所示。

阿布云代理主要分为两种:专业版和动态版,另外还有定制版(参考官网介绍)。

  • 专业版:多个请求锁定一个代理IP,海量IP资源池需求,近300个区域全覆盖,代理IP可连续使用1分钟,它适用于请求IP连续型业务。
  • 动态版:每个请求分配一个随机代理IP,海量IP资源池需求,近300个区域全覆盖,它适用于爬虫类业务。
  • 定制版:它可以灵活按照需求定制,定制IP区域,定制IP使用时长,定制IP每秒请求数。

关于专业版和动态版的更多介绍可以查看官网:https://www.abuyun.com/http-proxy/dyn-intro.html。

对于爬虫来说,我们推荐使用动态版,购买之后可以在后台看到代理隧道的用户名和密码,如下图所示。

整个代理的连接域名为proxy.abuyun.com,端口为9020,它们均是固定的,但是每次使用之后IP都会更改,该过程其实就是利用了代理隧道实现(参考官网介绍)。

  • 云代理通过代理隧道的形式提供高匿名代理服务,支持HTTP/HTTPS协议。
  • 云代理在云端维护一个全局IP池供代理隧道使用,池中的IP会不间断更新,以保证同一时刻IP池中有几十到几百个可用代理IP。
  • 需要注意的是,代理IP池中部分IP可能会在当天重复出现多次。
  • 动态版HTTP代理隧道会为每个请求从IP池中挑选一个随机代理IP。
  • 无须切换代理IP,每一个请求分配一个随机代理IP。
  • HTTP代理隧道有并发请求限制,默认每秒只允许5个请求。如果需要更多请求数,请额外购买。

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

使用教程的官网链接为:https://www.abuyun.com/http-proxy/dyn-manual-python.html。教程提供了requests、urllib、Scrapy的接入方式。

现在我们以requests为例,接入代码如下所示:

import requests

url = 'http://httpbin.org/get'

# 代理服务器
proxy_host = 'proxy.abuyun.com'
proxy_port = '9020'

# 代理隧道验证信息
proxy_user = 'H01234567890123D'
proxy_pass = '0123456789012345'

proxy_meta = 'http://%(user)s:%(pass)s@%(host)s:%(port)s' % {
    'host': proxy_host,
    'port': proxy_port,
    'user': proxy_user,
    'pass': proxy_pass,
}
proxies = {
    'http': proxy_meta,
    'https': proxy_meta,
}
response = requests.get(url, proxies=proxies)
print(response.status_code)
print(response.text)

这里其实就是使用了代理认证,在前面我们也提到过类似的设置方法,运行结果如下:

200
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Connection": "close", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.18.1"
  }, 
  "origin": "60.207.237.111", 
  "url": "http://httpbin.org/get"
}

输出结果的origin即为代理IP的实际地址。这段代码可以多次运行测试,我们发现每次请求origin都会在变化,这就是动态版代理的效果。

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

四、结语

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

崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

原文发布于微信公众号 - 进击的Coder(FightingCoder)

原文发表时间:2018-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

InnoDB 日志文件大小设为多大合适?

InnoDB 日志文件的作用 Innodb 数据表崩溃后,再次启动时,MySQL会扫描日志文件,看哪些记录不在表空间中,对其进行 redo 操作,从而完成数据恢...

44211
来自专栏架构师之路

php使用tcp长连接的一种优化思路

一、面向人群 如果站点架构满足以下几点,那么本文的优化方案会非常适合: 1)使用php等脚本语言作为开发语言 2)需要连接后端服务,例如RPC服务、memcac...

2666
来自专栏友弟技术工作室

SSO入门

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映...

38411
来自专栏Spark学习技巧

Hdfs的数据磁盘大小不均衡如何处理

最近浪尖在纠结一个现在看起来很简单的问题。 现象描述 建集群的时候,datanode的节点数据磁盘总共是四块磁盘做矩阵成了一个7.2TB的sdb1(data1...

3589
来自专栏网络

装逼必备:大型分布式网站术语分析

来自: 朱小厮的博客 程序猿自媒体已获转载授权 1、I/O优化 1、增加缓存,减少磁盘的访问次数。 2、优化磁盘的管理系统,设计最优的磁盘方式策略,以及磁盘的寻...

1819
来自专栏张善友的专栏

使用C# 和Consul进行分布式系统协调

随着大数据时代的到来,分布式是解决大数据问题的一个主要手段,随着越来越多的分布式的服务,如何在分布式的系统中对这些服务做协调变成了一个很棘手的问题。今天我们就来...

3105
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯TMQ】移动H5性能测试平台解决方案

说到H5性能测试,大家想到最多的是在PC端利用Firebug、Fiddle和HttpWatch等工具进行测试和性能指标的分析,但是如果我们测试的是Android...

7640
来自专栏MySQL

10款常见MySQL高可用方案选型解读

关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。

4369
来自专栏用户2442861的专栏

CQRS架构简介

http://www.cnblogs.com/netfocus/p/4055346.html

582
来自专栏云端架构

【云端架构】PHP获取用户访问IP地址

适合部分场景需要得到用户的真实IP地址,例如,日志记录,地理定位,将用户信息,网站数据分析等,其实获取IP地址很简单$_SERVER[\'REMOTE_ADDR...

3557

扫码关注云+社区