python的requests库爬取火车票信息和所需价钱

一共分为俩个函数

1,获取城市的各个缩写

def city_number():#获取城市各地区缩写如 "北京":"KCN"

  ko=[]
  lp=[]
  html=requests.get("https://kyfw.12306.cn/otn/resources/js/framework/station_name.js",headers=headers)
  htmls=html.content.decode()
  opp=htmls[:len(htmls)-1].split("=")[1]
  lists_opp=opp.split("|")
  for name in lists_opp:
  if "@" in name:
  lists_opp.remove(name)
  for i in range(len(lists_opp)):
  if i % 2==0:
    ko.append(lists_opp[i])
  else :
    lp.append(lists_opp[i])
#print(lists_opp)

  return dict(zip(ko,lp))

2 ,输入出入发地  得到i结果

def station_infos():
  while True:
    zidian=city_number()
    left=input("请输入出发地:")
    lefts=zidian[left]
    right=input("请输入到达地:")
    time.strftime("")
    rights=zidian[right]
    shijian=time.strftime("%Y-%m-%d")#格式化时间,,,今天时间
    times=input("请输入时间(%s):"%shijian)
    if len(times)==0:
    times=shijian
  html=requests.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%8E%A6%E9%97%A8,XMS&ts=%E6%BD%A2%E5%B7%9D,KCN&date=2019-10-20&flag=N,N,Y",headers=headers)
    for index_url in html.cookies:
      Cookies[index_url.name]=index_url.value
    r=requests.session()
    hui=r.get("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station=        {}&purpose_codes=ADULT".format(times,lefts,rights),headers=headers,cookies=Cookies)
    big_car=json.loads(hui.text)['data']['map']
    pop=list(big_car.values())

    #number_info=len(json.loads(hui.text)['data']['result'])#几辆火车
    station_info=json.loads(hui.text)['data']['result']
    if len(station_info)==0:
      print("当前无车次")
    else:

      for info in station_info:
      data_list=info.split("|")
      train_no=data_list[2]
      kop="https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no={}&from_station_no={}&to_station_no={}&seat_types={}&train_date=          {}".format(train_no,data_list[16],data_list[17],data_list[35],times)
      prices=r.get(kop,headers=headers,cookies=Cookies)#获取车票价钱
      ko=json.loads(prices.text)
      train_number = data_list[3] #1,车次
      go_time = data_list[8] # 2,出发时间
      arrive_time = data_list[9] # 3到达时间
      cost_time = data_list[10] # 4历时
      special_class_seat = data_list[32] or '--' # 5 商务/特等座
      first_class_seat = data_list[31] or '--' #6 一等座
      second_class_seat = data_list[30] or '--' # 7二等座
      soft_sleep = data_list[23] or '--' #9 软卧
      hard_sleep = data_list[28] or '--' # 10硬卧
      hard_seat = data_list[29] or '--' # 11硬座
      no_seat = data_list[26] or '--' # 12无座
      if 'M' and 'O' in ko['data']:
         st=ko['data']['A9']#商务座/特等座
         first=ko['data']['M']#一等座
         sec=ko['data']['O']#二等座
         wz=ko['data']['WZ']#无座价钱
        print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{} 硬卧:{} 硬座:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,hard_sleep,hard_seat,no_seat,wz,data_list[13]))
      elif 'A1' in ko['data']:

        yingz=ko['data']['A1']#硬座价钱
        yingw=ko['data']['A3']#硬卧价钱
        ruanwz=ko['data']['A4']#软卧价钱
        wz=ko['data']['WZ']#无座价钱
        print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 一等座:{} 二等座:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,first_class_seat,second_class_seat,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))
      elif 'A9' and 'A1' in ko['data']:
        st=ko['data']['A9']#商务座/特等座
        first=ko['data']['M']#一等座
        sec=ko['data']['O']#二等座
        wz=ko['data']['WZ']#无座价钱
        yingz=ko['data']['A1']#硬座价钱
        yingw=ko['data']['A3']#硬卧价钱
        ruanwz=ko['data']['A4']#软卧价钱
        print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

3,以下是完整代码

import requests
import json
import time

headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"

}
Cookies={}
def station_infos():
while True:
zidian=city_number()
left=input("请输入出发地:")
lefts=zidian[left]
right=input("请输入到达地:")
time.strftime("")
rights=zidian[right]
shijian=time.strftime("%Y-%m-%d")#格式化时间,,,今天时间
times=input("请输入时间(%s):"%shijian)
if len(times)==0:
times=shijian
html=requests.get("https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc&fs=%E5%8E%A6%E9%97%A8,XMS&ts=%E6%BD%A2%E5%B7%9D,KCN&date=2019-10-20&flag=N,N,Y",headers=headers)
for index_url in html.cookies:
Cookies[index_url.name]=index_url.value
r=requests.session()
hui=r.get("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(times,lefts,rights),headers=headers,cookies=Cookies)
big_car=json.loads(hui.text)['data']['map']
pop=list(big_car.values())

#number_info=len(json.loads(hui.text)['data']['result'])#几辆火车
station_info=json.loads(hui.text)['data']['result']
if len(station_info)==0:
print("当前无车次")
else:

for info in station_info:
data_list=info.split("|")
train_no=data_list[2]
kop="https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no={}&from_station_no={}&to_station_no={}&seat_types={}&train_date={}".format(train_no,data_list[16],data_list[17],data_list[35],times)
prices=r.get(kop,headers=headers,cookies=Cookies)#获取车票价钱
ko=json.loads(prices.text)
train_number = data_list[3] #1,车次
go_time = data_list[8] # 2,出发时间
arrive_time = data_list[9] # 3到达时间
cost_time = data_list[10] # 4历时
special_class_seat = data_list[32] or '--' # 5 商务/特等座
first_class_seat = data_list[31] or '--' #6 一等座
second_class_seat = data_list[30] or '--' # 7二等座
soft_sleep = data_list[23] or '--' #9 软卧
hard_sleep = data_list[28] or '--' # 10硬卧
hard_seat = data_list[29] or '--' # 11硬座
no_seat = data_list[26] or '--' # 12无座
if 'M' and 'O' in ko['data']:
print("风格化法国")

st=ko['data']['A9']#商务座/特等座
first=ko['data']['M']#一等座
sec=ko['data']['O']#二等座
wz=ko['data']['WZ']#无座价钱
print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{} 硬卧:{} 硬座:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,hard_sleep,hard_seat,no_seat,wz,data_list[13]))
elif 'A1' in ko['data']:
print("和梵蒂冈")

yingz=ko['data']['A1']#硬座价钱
yingw=ko['data']['A3']#硬卧价钱
ruanwz=ko['data']['A4']#软卧价钱
wz=ko['data']['WZ']#无座价钱
print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 一等座:{} 二等座:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,first_class_seat,second_class_seat,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))
elif 'A9' and 'A1' in ko['data']:
print("改好发给")
st=ko['data']['A9']#商务座/特等座
first=ko['data']['M']#一等座
sec=ko['data']['O']#二等座
wz=ko['data']['WZ']#无座价钱
yingz=ko['data']['A1']#硬座价钱
yingw=ko['data']['A3']#硬卧价钱
ruanwz=ko['data']['A4']#软卧价钱
print(pop[1]+"--->"+pop[0],"车次:{} 出发时间:{} 到达时间:{} 历时:{} 商务/特等座:{} 价钱:{} 一等座:{} 价钱:{} 二等座:{} 价钱:{} 软卧:{}价钱:{} 硬卧:{}价钱:{} 硬座:{}价钱:{} 无座:{}价钱:{}———》开车时间:{}".format(train_number,go_time,arrive_time,cost_time,special_class_seat,st,first_class_seat,first,second_class_seat,sec,soft_sleep,ruanwz,hard_sleep,yingw,hard_seat,yingz,no_seat,wz,data_list[13]))

def city_number():#获取城市各地区缩写如 "北京":"KCN"
ko=[]
lp=[]
html=requests.get("https://kyfw.12306.cn/otn/resources/js/framework/station_name.js",headers=headers)
htmls=html.content.decode()
opp=htmls[:len(htmls)-1].split("=")[1]
lists_opp=opp.split("|")
for name in lists_opp:
if "@" in name:
lists_opp.remove(name)
for i in range(len(lists_opp)):
if i % 2==0:
ko.append(lists_opp[i])
else :
lp.append(lists_opp[i])
#print(lists_opp)

return dict(zip(ko,lp))
if __name__=="__main__":
station_infos()

猜你喜欢

转载自www.cnblogs.com/MaomaoWorld/p/11796514.html
今日推荐