吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5537|回复: 26
收起左侧

[Python 转载] 12306车票查询

[复制链接]
18382747915 发表于 2018-9-25 15:49
本帖最后由 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('[a-z]\|(.*?)\|(.*?)\|(.*?)\|(.*?)\|\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()

   
1.jpg

免费评分

参与人数 5吾爱币 +5 热心值 +5 收起 理由
雪千渔 + 1 + 1 谢谢@Thanks!
dzblh + 1 + 1 热心回复!
似梦流年丶 + 1 + 1 12306更新维护验证都挺勤的,不知道做出来撑不撑得住
林中雾121 + 1 + 1 用心讨论,共获提升!
微笑¥ + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

孤霜情冷点朱砂 发表于 2018-10-10 15:06
请问代码复制粘贴过去为何运行不了,你之后修改的那个加在哪里eval() arg 1 must be a string, bytes or code object

修改代码片段为:
i = int(input("请选择:"))
         lit = list(Citycode)
         chengshima = lit[i]
         chengshima = eval(chengshima[2])
         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[i]
        chengshima = eval(chengshima[2])
        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
期待楼主完善开发,辛苦。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 03:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表