API 使用¶
接口列表¶
启动 ProxyPool 的 server 后会提供如下 HTTP 接口:
| 接口 | 方法 | 说明 | 参数 |
|---|---|---|---|
/ |
GET | 返回 API 列表 | 无 |
/get |
GET | 随机返回一个代理 | 可选:?type=https 过滤 HTTPS 代理 |
/pop |
GET | 返回并删除一个代理 | 可选:?type=https 过滤 HTTPS 代理 |
/all |
GET | 返回所有代理 | 可选:?type=https 过滤 HTTPS 代理 |
/count |
GET | 返回代理数量统计 | 无 |
/delete |
GET | 删除指定代理 | ?proxy=host:port |
调用示例¶
在爬虫中使用¶
通过调用 API 接口来使用代理池:
import requests
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
def delete_proxy(proxy):
requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))
def get_html():
retry_count = 5
proxy = get_proxy().get("proxy")
while retry_count > 0:
try:
# 使用代理访问
html = requests.get(
"http://www.example.com",
proxies={
"http": "http://{}".format(proxy),
"https": "https://{}".format(proxy),
},
)
return html
except Exception:
retry_count -= 1
# 删除代理池中代理
delete_proxy(proxy)
return None
本例中在本地 127.0.0.1 启动端口为 5010 的 server,使用 /get 接口获取代理,/delete 删除代理。
获取 HTTPS 代理¶
获取代理统计¶
# 返回代理数量、类型分布、来源分布
stats = requests.get("http://127.0.0.1:5010/count/").json()
# 示例返回: {"http_type": {"http": 10, "https": 5}, "source": {"freeProxy01": 8, "freeProxy02": 7}, "count": 15}
直接读取数据库¶
除了通过 API 接口,也可以直接读取数据库获取代理。目前支持两种数据库:Redis 和 SSDB。
- Redis:存储结构为 hash,hash name 为配置项中的
TABLE_NAME(默认use_proxy) - SSDB:存储结构为 hash,hash name 为配置项中的
TABLE_NAME
可以在代码中自行读取数据库获取代理列表。