吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]
查看: 6697|回复: 27
收起左侧

[Python 转载] python【练手】12306查票

[复制链接]
麦米尔加弗德 发表于 2018-12-26 19:42
本帖最后由 麦米尔加弗德 于 2018-12-28 22:45 编辑

------450页的书老师划重点447页,就因为是他编的,我选择死亡-----------

网上的现在12306基本都失效了,12306改了一些东西,我这个是自己做的,可以使用的。
print那里直男审美、、、、勿怪勿怪
  • 目前为止是全网可用的(我就看着他的服务器地址在我眼皮子底下变的)
  • 加入了一点验证机制,防止误输
  • 腌制了一个pickle,优化了一点速度(虽然我觉得没卵用)
  • 与众不同的逻辑,简明的处理(网上的那些罗里吧嗦的,实现还困难)
[Python] 纯文本查看 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
# coding:utf-8
import json
import requests
import urllib3
import os
import pickle
import re
 
FILENAME = 'station.pickle'
 
urllib3.disable_warnings()
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    "Host":"kyfw.12306.cn",
    "Referer":"https://kyfw.12306.cn/otn/passport?redirect=/otn/"
}
 
SESSION = requests.Session()
SESSION.headers.update(HEADERS)
SESSION.verify = False
SESSION.get('https://kyfw.12306.cn/otn/login/init')
 
 
def station_name():
    url='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9085'
    response = SESSION.get(url)
    station_name = {}
     
    station_list=response.text.replace('var station_names =','')
    station_list=station_list[1:-2]
    station_list=station_list.split('@')[1:]
     
    for i in station_list:
        i=i.split('|')
        station_name[i[1]] = i[2]
 
    with open(FILENAME, 'wb') as f:
        pickle.dump(station_name, f)
 
def check_ticket():
    from_station_name=input('请输入你的出发地(例如:北京):\n')
    to_station_name=input('请输入你的目的地(例如:上海):\n')
    date=input('请输入你的乘车时间(例如:2018-12-27):\n')
    with open(FILENAME, 'rb') as f:
        station_name = pickle.load(f)
     
    try:   
        from_station_code=station_name[from_station_name]
        to_station_code=station_name[to_station_name]
        date_re = re.search(r"\d{4}-\d{1,2}-\d{1,2}", date)       
        if date_re == None:
            print('时间输入有误!,请重新输入')
            check_ticket()
    except:
        print('输入的站台有误,请重新输入!')
        check_ticket()
 
    url='https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date='+date+'&leftTicketDTO.from_station='+from_station_code+'&leftTicketDTO.to_station='+to_station_code+'&purpose_codes=ADULT'
    response = SESSION.get(url)
    response.encoding = 'utf-8'
    try:
        station_dict=json.loads(response.text)
    except:
        print( 'ERROR,信息获取错误,重新连接!' )
        check_ticket()
    result = station_dict['data']['result']
    res_map = station_dict['data']['map']
    
 
    for station in result:
        station = station.split('|')
        print('**********************************************************')
        #显示列车详情
        from_station = res_map[station[6]]
        to_station = res_map[station[7]]
        for i in range(len(station)):
            if station[i] == '':
                station[i] = '--'
                 
         
        print('''时间:%s    车次:%s    出发站-到达站:%s-%s    出发时间-到达时间:%s-%s    历时:%s''' %(
            date, station[3], from_station, to_station, station[8], station[9], station[10]))
        print('''
        商务座、特等座:%s
        一等座:%s
        二等座:%s
            软卧:%s
            硬卧:%s
            硬座:%s
            无座:%s
        ''' %(station[32], station[31], station[30], station[23], station[28], station[29], station[26]))
 
 
def main():
    if os.path.isfile(FILENAME):
        pass
    else:
        station_name()
    check_ticket()
 
 
if __name__ == '__main__':
    main()


欢迎给我提意见!共同进步

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
呙翰林 + 1 + 1 我很赞同!
php.c + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 麦米尔加弗德 发表于 2018-12-28 16:53
Palantir 发表于 2018-12-28 16:23
查票...加上抢票就好了

12306春运东西全改了,现在对一些参数进行加密了,我见识浅,解密不出来
Palantir 发表于 2018-12-29 17:58
麦米尔加弗德 发表于 2018-12-28 16:53
12306春运东西全改了,现在对一些参数进行加密了,我见识浅,解密不出来

楼主加油
 楼主| 麦米尔加弗德 发表于 2018-12-26 19:44
print哪里因为eclipes的独特缩进,是真的丑.........要改的拿去改吧
biutefo 发表于 2018-12-26 20:13
路过看看就走
goupiluobo 发表于 2018-12-26 20:59
楼主能说说python为什么能做人工智能,而java之类的不能做呢?泄泄
54264 发表于 2018-12-26 20:59
顺路看看 不懂py看不懂
eva168 发表于 2018-12-26 21:20
路过走了
icristopher 发表于 2018-12-26 21:23
好好学习,天天向上,感谢楼主。
wangqiustc 发表于 2018-12-26 21:46
竟然这么简洁
qqmy 发表于 2018-12-26 21:56
python还是想学没学的路上。。汗颜
闵于心 发表于 2018-12-26 22:34
刚好用来抢票
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2025-3-13 16:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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