18382747915 发表于 2018-9-25 15:49

12306车票查询

本帖最后由 18382747915 于 2018-9-25 15:58 编辑

输入地址,时间,车票类型即可查询车票,
做了一半,想做成全自动抢票,目前遇到的问题是12306的验证码识别,正在努力解决中
先把这个半成品发出来:
源码如下:
def select():
    y = input("请输入出发地:")
    chufadi=csm(y)
    if chufadi!='0':
      y=input("请输入目的地:")
      daodadi=csm(y)
      if daodadi!='0':
            date=input("请选择出发日期(日期格式:xxxx-xx-xx):")
            print("0:成人票")
            print("1:学生票")
            shenfen=input("请选择")
            if shenfen=='0':
                shenfen='0X00'
elif shenfen=='1':
                shenfen='ADULT'
else:
                print('车票类型选择错误')
            url='https://kyfw.12306.cn/otn/leftTicket/queryA?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=%s'%(date,chufadi,daodadi,shenfen)
            header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:62.0) Gecko/20100101 Firefox/62.0',
                      'Host': 'kyfw.12306.cn',
                      'Referer':'https://kyfw.12306.cn/otn/leftTicket/init'}
            reque=requests.get(url,headers=header)
            html=json.loads(reque.text.strip('()[]'))
            html=html['data']
            html = html['result']
            h=len(html)
            if h>0:
                # text=re.findall('(.*?)\|预订\|(.*?)\|(.*?)\|(.*?)',str(html),re.S)
                text=re.findall('\|预订\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|Y\|',str(html),re.S)
                # print(text)
                print('一共%s趟列车'%str(len(text)))
                for i in text:
                  print('车次:%s'%i[1])
                  print('出发时间:%s'%i[6])
                  print('到达时间:%s'% i[7])
                  print('历时:%s'%i[8])
                  print('-------------------------------')
            else:
                print("没票了")

      else:
            print("未找到目的地城市的车站,请检查输入是否错误")

    else:
      print("未找到该城市的车站,请检查输入是否错误")
def csm(y):
    url = 'https://im0x.com/C/detail/155'
date = requests.get(url)
    html = date.text
    Citycode =re.findall('\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|\d',html,re.S)
    Citycode=str(Citycode)
    Citycode=re.findall("('("+y+".*?), (.*?),(.*?),(.*?))",Citycode,re.S)
    cou=len(Citycode)
    if cou>0:
      for i ,l in enumerate(Citycode):
            image_list=l[0].split(",")
            print ('%s:%s'%(i,eval(image_list[0])))
      i=int(input("请选择:"))
      lit=list(Citycode)
      chengshima=lit[2]
      chengshima=eval(chengshima)
      return chengshima
    else:
      return "0"
if __name__ == '__main__':
    select()

   

孤霜情冷点朱砂 发表于 2018-10-10 15:06

请问代码复制粘贴过去为何运行不了,你之后修改的那个加在哪里eval() arg 1 must be a string, bytes or code object

修改代码片段为:
i = int(input("请选择:"))
         lit = list(Citycode)
         chengshima = lit
         chengshima = eval(chengshima)
         return chengshima

lyn1985 发表于 2018-9-29 15:47

eval() arg 1 must be a string, bytes or code object

修改代码片段为:
i = int(input("请选择:"))
      lit = list(Citycode)
      chengshima = lit
      chengshima = eval(chengshima)
      return chengshima

微笑¥ 发表于 2018-9-25 16:04

先收藏备用,期待可以自动抢票

ikeeki 发表于 2018-9-25 16:07

这是自动抢票的铺垫?

rainprince 发表于 2018-9-25 16:08

我一直在等那个图,but他就是不显示,真的是,代码看了一下,python,不懂,不过支持一下

林中雾121 发表于 2018-9-25 16:12

谢谢分享,期待可以自动抢票

libojun 发表于 2018-9-25 16:12

感谢分享

快乐小风 发表于 2018-9-25 16:13

python做这些真的有天然优势

温情阿 发表于 2018-9-25 16:14

感谢分享

wutian88 发表于 2018-9-25 16:22


谢谢分享,期待可以自动抢票

yjf306 发表于 2018-9-25 16:24

期待楼主完善开发,辛苦。
页: [1] 2 3
查看完整版本: 12306车票查询