我们在《python脚本百度(SEO)快排--模拟点击最新核心源码》中提到对快排影响的重要因素之一就是IP,如何使用多IP执行快排脚本有两种方法:
1、使用动态拨号VPS
2、代理IP池
今天我们主要来说下如何设计一个万能的代理IP池接口?
我们随便找几家做代理IP池的厂家,看看他们都是什么样的接口?
1、芝麻HTTP
接口文档:https://zhimahttp.com/getapi/
2、品易HTTP
接口文档:http://pc.py.cn/api/
3、华益云
接口文档:?id=8
4、站大爷
接口文档:https://www.zdaye.com/doc/api/ShortProxy/
5、proxyPool
接口文档:
上述5个平台代理ip池都有各自的对接接口,而且他们的接口都不一样,有的是通过GET方式获取的,有的是通过POST方式获取的,获取的结果也不相同,有的可以直接返回代理ip如:114.55.53.151:3128 这样的格式是我们需要,有的接口返回的是json格式如:
{ "anonymous": "", "check_count": 2, "fail_count": 0, "https": false, "last_status": true, "last_time": "2021-12-10 12:15:59", "proxy": "8.218.161.168:1080", "region": "", "source": "freeProxy05" }如上这种json格式就需要从中提取代理ip与端口
返回结果格式上看可以把他们分为两类:
一类是直接返回代理ip 另一类直接返回json格式数据
对于第一种直接返回代理ip的我们不需要处理直接哪来使用就可以
对于返回json格式数据我们需要从中提取代理ip与端口,但不同厂家返回的json数据格式是不统一的,比如:
{ "code":0, "success":true, "msg":"0", "data":[ { "ip":"49.68.68.197", "port":33220, "expire_time":"2019-05-24 08:58:31", "city":"徐州市", "isp":"电信" }, { "ip":"58.218.201.108", //隧道ip (代理ip) "port":2690, // 代理端口 "expire_time":"2019-05-24 08:55:31", "city":"苏州市", "isp":"电信", "outip":"219.136.47.161",// 隧道ip的出口ip } ] }那么如何解决做一个配置,能兼容所有的代理ip池呢?
在python中可以使用jsonpath库,jsonpath提取json格式的数据非常方便
目录
1. jsonpath介绍
用来解析多层嵌套的json数据;JsonPath 是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java。
使用方法如:
import jsonpath res=jsonpath.jsonpath(dic_name,$..key_name) #嵌套n层也能取到所有key_name信息,其中:“$”表示最外层的{},“..”表示模糊匹配,当传入不存在的key_name时,程序会返回false2. JsonPath 对于 JSON 来说,相当于 XPath 对于 XML
安装方法:
pip install jsonpath官方文档:http://goessner.net/articles/JsonPath
3. JsonPath与XPath语法对比:
Json结构清晰,可读性高,复杂度低,非常容易匹配,下表中对应了XPath的用法。
/
$
跟节点
.
@
现行节点
/
. or []
取子节点
..
n/a
就是不管位置,选择所有符合条件的条件
*
*
匹配所有元素节点
[]
[]
迭代器标示(可以在里面做简单的迭代操作,如数组下标,根据内容选值等)
|
[,]
支持迭代器中做多选
[]
?()
支持过滤操作
n/a
()
支持表达式计算
()
n/a
分组,JsonPath不支持
4. 使用实例
d={ "error_code": 0, "stu_info": [ { "id": 2059, "name": "小白", "sex": "男", "age": 28, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "", "gold": 10896, "info":{ "card":, "bank_name":中国银行 } }, { "id": 2067, "name": "小黑", "sex": "男", "age": 28, "addr": "河南省济源市北海大道32号", "grade": "天蝎座", "phone": "", "gold": 100 } ] } res= d["stu_info"][1][name] #取某个学生姓名的原始方法:通过查找字典中的key以及list方法中的下标索引 print(res) #输出结果是:小黑 import jsonpath res1=jsonpath.jsonpath(d,$..name) #嵌套n层也能取到所有学生姓名信息,$表示最外层的{},..表示模糊匹配 print(res1) #输出结果是list:[小白, 小黑] res2= jsonpath.jsonpath(d,$..bank_name) print(res2) #输出结果是list:[中国银行] res3=jsonpath.jsonpath(d,$..name123) #当传入不存在的key(name)时,返回False print(res3) #输出结果是:False5、提取proxypool接口中的代理
proxypool接口::5010/get/
通过GET方式请求,返回数据如下:
{ "anonymous": "", "check_count": 1, "fail_count": 0, "https": false, "last_status": true, "last_time": "2021-12-10 14:19:22", "proxy": "112.14.47.6:52024", "region": "", "source": "freeProxy05/freeProxy04" }从这样的接口中获取代理ip的方式如下:
import requests import jsonpath import json response = requests.get(http://127.0.0.1:5010/get/) data = json.loads(response.text) ips = jsonpath.jsonpath(data, $..proxy) #返回的是list if len(ips) >0 : print(ips[0])至此这样的一个接口就写好了,下面是快排软件中的设置截图:
测试效果:
未完待续...
关注“何三笔记”回复 “快排工具” 获取下载
如果想获取源代码回复“快排源码”