相对免费代理来说,付费代理的稳定性相对更高一点,本节介绍一下爬虫付费代理的相关使用过程。
1. 付费代理分类
在这里将付费代理分为两类:
本节讲解一下这两种代理的使用方法,分别以两家代表性的代理网站为例进行讲解。
2. 讯代理
Python资源共享群:484031800
讯代理个人使用过代理有效率还是蛮高的,此处非广告,其官网为: http://www.xdaili.cn/ ,如图 9-5 所示:
图 9-5 讯代理官网
有多种类别的代理可供选购,摘抄其官网的各类别代理介绍如下:
一般选择第一类别优质代理即可,代理量比较大,但是代理的稳定性没那么高,有一些代理也是不可用的,所以这种代理的使用方式就需要借助于上一节所说的代理池,我们自己再做一次筛选,确保代理可用。
可以购买一天的试一下效果,购买之后会提供一个 API 来提取代理,如图 9-6 所示:
图 9-6 提取页面
比如在这里我的提取 API 为: http://www.xdaili.cn/ipagent/greatRecharge/getGreatIp?spiderId=da289b78fec24f19b392e04106253f2a&orderno=YZ20177140586mTTnd7&returnType=2&count=20 ,可能已过期,在此仅做演示。
在这里指定了提取数量为 20,提取格式为 Json,直接访问链接即可提取代理,结果如图 9-7 所示:
图 9-7 提取结果
接下来我们要做的就是解析这个 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,通过代理池接口即可获取到。
以上以讯代理为例说明了此种批量提取代理的使用方法。
3. 阿布云代理
阿布云代理提供了代理隧道,代理速度快而且非常稳定,此处依然非广告,其官网为: https://www.abuyun.com/ ,如图 9-8 所示:
图 9-8 阿布云官网
阿布云的代理主要分为两种,专业版和动态版,另外还有定制版,摘抄官网的介绍如下:
关于专业版和动态版的更多介绍可以查看官网: https://www.abuyun.com/http-proxy/dyn-intro.html 。
对于爬虫来说,推荐使用动态版,购买之后可以在后台看到代理隧道的用户名和密码,如图 9-9 所示:
图 9-9 阿布云代理后台
可以发现整个代理的连接域名为 proxy.abuyun.com,端口为 9020,均是固定的,但是使用之后每次的 IP 都会更改,这其实就是利用了代理隧道实现。
其官网原理介绍如下:
注意默认套餐的并发请求是 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 都会在变化,这就是动态版代理的效果。
这种效果其实跟我们之前的代理池的随机代理效果类似,都是随机取出了一个当前可用代理。
但是此服务相比于维护代理池来说,使用更加方便,配置简单,省时省力,在价格可以接受的情况下,个人推荐此种代理。
4. 结语
以上便是付费代理的相关使用方法,稳定性相比免费代理更高,可以自行选购合适的代理。