一直晨、查詢?nèi)珖囌倦妶?bào)碼
1.地址
url ='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'
2.解析數(shù)據(jù)
data_str = req.text.strip("var station_names =';") #將頭部和尾部刪掉
data_list = data_str.split('@')[1:] #使用@分割成列表
list_temp = data_list[0].split('|') # 以 | 為分隔符,分割數(shù)據(jù)
3.分析數(shù)據(jù)
拼音縮寫 | 中文名稱 | 電報(bào)碼 | 拼音全拼 | 拼音第一個之母 | 序號 |
---|---|---|---|---|---|
bjb | 北京北 | VAP | beijingbei | bjb | 0 |
bjd | 北京東 | BOP | beijingdong | bjd | 1 |
... | ... | ... | ... | ... | ... |
從中分析:我們只需要中文名稱和電報(bào)碼空入,電報(bào)碼用于查詢車次沈贝,中文名稱用于顯示系奉。
二丘侠、查詢車次
1.地址
url = 'https://kyfw.12306.cn/otn/leftTicket/queryT'
2.請求參數(shù)
參數(shù) | 格式 | 說明 |
---|---|---|
leftTicketDTO.train_date | 2021-01-11 | 查詢?nèi)掌?/td> |
leftTicketDTO.from_station | GIW | 出發(fā)站電報(bào)碼 |
leftTicketDTO.to_station | ZYE | 到達(dá)站電報(bào)碼 |
purpose_codes | ADULT | 默認(rèn)不變 |
3.解析數(shù)據(jù)
data_json = json.loads(req.text)
result = data_json['data']['result']
list_temp = result[0].split("|")
4.分析數(shù)據(jù)
list_temp列表 | 內(nèi)容 | 說明 |
---|---|---|
[1] | 預(yù)定 | |
[2] | 710000K8720M | 列車編號 |
[3] | K872 | 車次 |
[4] | ZJZ | 起點(diǎn)站 |
[5] | ICW | 終點(diǎn)站 |
[6] | GIW | 出發(fā)站 |
[7] | ZYE | 到達(dá)站 |
[8] | 05:24 | 出發(fā)時間 |
[9] | 06:51 | 到達(dá)時間 |
[10] | 01:27 | 歷時 |
[11] | Y/N | 是否有票 |
[13] | 20210111 | 日期 |
[32] | 特等座 | |
[31] | 一等座 | |
[30] | 二等座 | |
[29] | 有 | 硬座 |
[28] | 有 | 硬臥 |
[26] | 無座 | |
[23] | 2 | 軟臥 |
三评也、實(shí)現(xiàn)余票查詢-源碼
__author__ = 'ztaos'
#coding:utf-8
import requests
import json
class Kyfw(object):
def __init__(self):
self.target = "https://www.12306.cn/"
self.header = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Cookie': 'cookie' #瀏覽器獲取
}
self.data = {
'leftTicketDTO.train_date':'2021-01-11', #時間
'leftTicketDTO.from_station':'GIW', #出發(fā)地
'leftTicketDTO.to_station':'ZYE', #到達(dá)地
'purpose_codes':'ADULT',
}
self.station_name = {}
def get_station_name(self):
"""
從12306 獲取所有車站信息
:return:
"""
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js'
req = requests.get(url,headers=self.header)
data_str = req.text.strip("var station_names =';") #將頭部和尾部刪掉
data_list = data_str.split('@')[1:] #使用@分割成列表
#數(shù)據(jù)存入字典
for r in data_list:
list_temp =r.split('|')
self.station_name[list_temp[2]] =list_temp[1]
def get_station_info(self):
"""
查詢車票信息
:return:
"""
url = "https://kyfw.12306.cn/otn/leftTicket/queryT"
req = requests.get(url=url,headers=self.header,params=self.data)
data_json = json.loads(req.text)
result = data_json['data']['result']
print("乘車日期:%s"%self.data['leftTicketDTO.train_date'])
print("車次\t出發(fā)站名\t到達(dá)站名\t出發(fā)時間\t到達(dá)時間\t特等座\t一等座\t二等座\t硬座\t無座\t硬臥\t軟臥")
for r in result:
list_temp = r.split("|") #以 | 為分隔符茶鉴,分割數(shù)據(jù)
if list_temp[11] == 'Y': #確認(rèn)是否有票
print(list_temp[3]+"\t"+self.station_name[list_temp[6]]+"\t\t"+self.station_name[list_temp[7]]+"\t\t"+list_temp[8]+"\t\t"+list_temp[9]+"\t\t"+list_temp[32]+"\t\t"+list_temp[31]+"\t\t"+list_temp[30]+"\t\t"+list_temp[29]+"\t\t"+list_temp[26]+"\t\t"+list_temp[28]+"\t\t"+list_temp[23])
kyfw = Kyfw()
kyfw.get_station_name()
kyfw.get_station_info()