Python编程实现12306的一个小爬虫实例
爬虫实例介绍
本爬虫实例主要是用Python编写的,通过模拟用户登录和查询车票的方式来获取查询结果。在本实例中,我们将使用requests库和正则表达式来进行实现,最终可以输出符合条件的车票信息。
实现步骤
步骤一:模拟登录
首先,我们需要模拟用户登录。通过F12或其他抓包工具,可以查看12306网站登录时提交的表单信息,我们需要根据这些信息来编写模拟登录代码。示例代码如下:
import requests
# 需要登录的账号密码
username = 'your username'
password = 'your password'
# 请求发送的URL地址
login_url = 'https://kyfw.12306.cn/passport/web/login'
# 构建请求头
headers = {
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '40',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Host': 'kyfw.12306.cn',
'Origin': 'https://kyfw.12306.cn',
'Referer': 'https://kyfw.12306.cn/otn/resources/login.html',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'
}
# 构建请求参数
params = {
'username': username,
'password': password,
'appid': 'otn'
}
# 发送POST请求进行模拟登录
response = requests.post(login_url, headers=headers, data=params)
# 检查登录结果
print(response.json()['result_message'])
步骤二:查询车票
登录成功后,我们可以模拟用户查询车票。通过F12或其他抓包工具,可以查看12306网站查询车票时提交的表单信息,我们需要根据这些信息来编写模拟查询代码。示例代码如下:
# 查询车次的站点信息,需根据实际需求修改,仅用作示例
from_station = '北京'
to_station = '上海'
# 请求发送的URL地址
query_url = f'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={train_date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT'
# 发送GET请求进行模拟查询
response = requests.get(query_url)
# 解析查询结果
result = response.json()['data']['result']
# 输出所有符合条件的车票信息
for item in result:
split_item = item.split('|')
if split_item[0] == '预订' and split_item[3] == 'G101':
print('车次:', split_item[3])
print('出发站点:', split_item[6])
print('到达站点:', split_item[7])
print('出发时间:', split_item[8])
print('到达时间:', split_item[9])
print('一等座:', split_item[31])
print('二等座:', split_item[30])
print('------------------------------')
示例说明
以上示例代码仅供参考,具体实现方法需依据实际情况进行修改。其中模拟登录和模拟查询均需要根据12306网站返回的请求头信息来进行构建请求头,以及根据实际车次信息来进行筛选。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python编程实现12306的一个小爬虫实例 - Python技术站