← 返回 Day 132 正文

Day 132 · 练习与清单

Day 132 - 代理池搭建 · 完成清单与练习

✅ 今日完成清单


📝 练习题

基础

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),并说明验证器应该如何针对性验证。