Day 132 - 代理池搭建 · 完成清单与练习
✅ 今日完成清单
- [ ] 理解代理三种匿名级别(透明 / 普通匿名 / 高匿名)的区别与检测方法
- [ ] 理解 HTTP 代理与 HTTPS CONNECT 隧道的工作原理
- [ ] 掌握 requests / aiohttp 使用代理的 API
- [ ] 理解代理池四大模块:抓取器 / 验证器 / 存储器 / API
- [ ] 理解分数机制(+10/-10)的设计动机
- [ ] 跑通
code/03-高匿名代理池实战.py完整流程 - [ ] 理解业务侧"拿代理 -> 失败扣分 -> 换代理重试"模式
📝 练习题
基础
1. 匿名度检测器
写一个函数 check_anonymity(proxy: str) -> str,通过 https://httpbin.org/headers 判断给定代理属于"透明 / 普通匿名 / 高匿名"哪一级,返回中文名称。提示:看 X-Forwarded-For 和 Via 头。
2. 并发验证器改造
code/02 中的验证器只测连通性。请给它加上延迟分级:<1s 优秀 / 1~3s 可用 / >3s 勉强,并按延迟排序输出结果列表。
进阶
3. 持久化代理池
把 03-高匿名代理池实战.py 中的内存 dict 改成 Redis ZSet 实现(ZADD/ZINCRBY/ZPOPMIN),保持相同接口 get_proxy()/mark_fail()。思考:Redis 版本多了什么能力?(提示:多进程/多机共享池)
4. 自动退避策略
业务侧 crawl_with_pool 目前是固定重试 5 次。请实现指数退避:连续失败越多,下次请求前 sleep 越久(1s/2s/4s...),并在池子耗尽时主动触发一轮 validate_all()。
挑战
5. 按目标站点健康度分组
同一个代理对不同目标站表现可能完全不同(被 A 站封但对 B 站可用)。设计一个方案:代理池按「目标域名」维护独立的分数(Redis key 设计为 pool:{domain}:score),并说明验证器应该如何针对性验证。