技术文摘
利用 Python 爬虫抢火车票的方法
2025-01-09 05:15:44 小编
利用 Python 爬虫抢火车票的方法
在火车票售卖高峰期,抢票难度极大,而利用 Python 爬虫技术,或许能增加成功购票的几率。下面就为大家介绍利用 Python 爬虫抢火车票的具体方法。
需要安装必要的库。在 Python 中,requests 库用于发送 HTTP 请求,BeautifulSoup 库用于解析 HTML 和 XML 文档。可以通过命令行使用 pip install requests beautifulsoup4 进行安装。
获取 12306 网站的页面数据是第一步。利用 requests 库发送 HTTP GET 请求到 12306 的车票查询页面,传递出发地、目的地、出发日期等参数。例如:
import requests
url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ'
params = {
'leftTicketDTO.train_date': '2024-01-01',
'leftTicketDTO.from_station': 'BJP',
'leftTicketDTO.to_station': 'SHH',
'purpose_codes': 'ADULT'
}
response = requests.get(url, params=params)
接着,解析获取到的页面数据。由于 12306 返回的是 JSON 格式的数据,可以直接使用 Python 的 json 模块进行解析。提取车次、余票数量等关键信息。示例代码如下:
import json
data = json.loads(response.text)
tickets = data['data']['result']
for ticket in tickets:
info = ticket.split('|')
train_number = info[3]
left_tickets = info[12]
print(f'车次:{train_number},余票:{left_tickets}')
然后,实现自动购票功能。当监测到有票时,需要模拟登录 12306 网站并提交订单。这部分较为复杂,涉及到处理验证码、模拟登录请求等。可以使用 selenium 库结合浏览器驱动来模拟浏览器操作,实现登录和购票流程。
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://kyfw.12306.cn/otn/login/init')
# 输入用户名和密码
driver.find_element_by_id('username').send_keys('your_username')
driver.find_element_by_id('password').send_keys('your_password')
# 处理验证码,这里需要手动完成
input('请手动完成验证码,然后按任意键继续...')
# 点击登录按钮
driver.find_element_by_css_selector('.login_btn').click()
最后,当成功登录后,跳转到车票预订页面,输入车次等信息并提交订单。
不过需要注意,12306 对爬虫行为有严格限制,频繁请求可能会导致 IP 被封。并且使用爬虫抢票要在法律允许的范围内进行,确保公平公正。