一、引言:12306 反爬虫的严峻挑战
12306 作为中国铁路售票系统,每天面临着海量的抢票请求,其反爬虫机制异常严格:IP 封锁、验证码、请求频率限制、会话追踪等。要在这样的环境下实现稳定抢票,必须设计一套完善的反反爬虫策略。12306 抢票项目通过 CDN 加速、代理 IP、请求频率控制和'小黑屋'机制等技术,成功突破了 12306 的反爬虫防线。
二、CDN 加速:突破网络瓶颈
1. 实现原理
CDN(内容分发网络)通过将资源分发到全球各地的节点,使用户可以就近获取所需内容,提高访问速度。12306 项目通过筛选和使用高速 CDN 节点,加速与 12306 服务器的通信。
2. 代码实现
核心文件:d:\python-code\12306-master\init\select_ticket_info.py
def cdn_certification(self):
"""CDN 认证与筛选"""
if self.is_cdn == 1:
CDN = CDNProxy()
all_cdn = CDN.open_cdn_file()
if all_cdn:
print("开启 cdn 查询")
print("本次待筛选 cdn 总数为{}, 筛选时间大约为 5-10min".format(len(all_cdn)))
t = threading.Thread(target=self.cdn_req, args=(all_cdn,))
t.setDaemon(True)
t.start()
else:
raise ticketConfigException("cdn 列表为空,请先加载 cdn")
3. 实现细节
- 从
cdn_list文件读取 CDN 节点列表 - 多线程测试 CDN 响应速度
- 筛选响应时间<500ms 的可用节点
- 动态更新可用 CDN 列表
三、代理 IP:隐藏真实身份
1. 实现原理
使用代理 IP 可以隐藏真实 IP 地址,避免因频繁请求导致的 IP 封锁。12306 项目支持自动爬取和筛选代理 IP。
2. 代码实现
核心文件:d:\python-code\12306-master\agency\agency_tools.py
def filter_proxy(self):
"""筛选可用代理 IP"""
socket.setdefaulttimeout()
path = os.path.join(os.path.dirname(__file__), )
f = (path, )
url =
proxy .proxy_list:
proxy_temp = {: .(proxy)}
:
req = requests.get(url, proxies=proxy_temp, timeout=, headers=head).content
write_proxy = proxy +
f.write(write_proxy)
Exception:
(.(proxy))


