【Python】爬虫实战03:自动化抢票脚本【某麦网】
import requests
from bs4 import BeautifulSoup
import time
import json
# 用户信息配置
USER = {
'username': '123456789', # 用户名
'password': '87654321', # 密码
'captcha_api': 'http://api.decaptcha.com/captcha?key=YOUR_API_KEY', # 验证码API接口
}
# 票务信息配置
TICKET_INFO = {
'train_date': '2023-04-01', # 出行日期
'from_station': 'BJP', # 出发站
'to_station': 'BJQ', # 目的地站
}
# 登录请求头
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',
}
# 初始化session,用于保持会话状态
session = requests.session()
def get_captcha():
"""获取验证码图片并返回验证码字符串"""
resp = session.get(USER['captcha_api'])
with open('captcha.jpg', 'wb') as f:
f.write(resp.content)
# 这里需要手动输入验证码,实际应用中可以集成OCR服务自动识别验证码
captcha = input('请输入验证码:')
return captcha
def login():
"""登录12306网站"""
# 请求登录页面,获取加密参数
resp = session.get('https://kyfw.12306.cn/otn/login/init')
# 解析返回的HTML,获取加密参数
soup = BeautifulSoup(resp.text, 'lxml')
login_form = {
'username': USER['username'],
'password': USER['password'], # 密码应为加密后的密码
'appid': 'otn',
}
# 登录请求
resp = session.post('https://kyfw.12306.cn/otn/login/loginAysnSuggest', data=login_form)
print(resp.json())
def query_ticket():
"""查询票务信息"""
# 构造查询参数
query_params = {
'leftTicketDTO.train_date': TICKET_INFO['train_date'],
'leftTicketDTO.from_station': TICKET_INFO['from_station'],
'leftTicketDTO.to_station': TICKET_INFO['to_station'],
'purpose_codes': 'ADULT',
}
# 查询票务信息
resp = session.post('https://kyfw.12306.cn/otn/leftTicket/queryZ', json=query_params, headers=HEADERS)
print(resp.json())
def buy_ticket():
"""模拟购票流程"""
# 此函数需要根据实际购票流程来编写,需要处理加入车厢、选择座位等步骤
pass
def main():
# 获取验证码
captcha = get_captcha()
# 登录
login()
# 查询票务信息
query_ticket()
# 自动购票
buy_ticket()
if __name__ == '__main__':
main()
这个示例代码提供了一个简化的框架来说
评论已关闭