首先,感谢实验楼的平台。为我们这些小白提供了学习的平台。其次针对这个项目来说的话,其实算是思路比较简单的。无非就是查询然后展示。不过里面涉及到的东西是很多的,比如编码的转换、类和函数、yeilde、。.join的用法等等。总之我在做的过程中碰到了比较多的问题,然后挨着百度解决。对巩固基础知识是相当有益的。还有,实验文档中的代码有错误的部分。话不多少,贴一下我的实验结果。代码显得很冗长,比较新手:

#coding:utf-8

import re

import urllib2

import json

from prettytable import PrettyTable

class TrainCollection(object):

# 显示车次、出发\到达站、出发\到达时间、历时、一等座、二等座、软卧、硬卧、硬座

#header = "train station time duration first second softsleep hardsleep hardsit".split()

header = u"车次 出发\到达站 出发\到达时间 历时 一等座 二等座 软卧 硬卧 硬座".split()

def init(self, aabb):

self.aabb = aabb

def _get_duration(self, row):

# 获取车的历时时间

duration = row.get("lishi").replace(":", u"小时") + u"分钟"

if duration.startswith("00"):

return duration[4:]

if duration.startswith("0"):

return duration[1:]

return duration

@property

def trains(self):

for row in self.aabb:

train = [

# 车次

row['station_train_code'],

# 出发、到达站

'\n'.join([colored("green",row['from_station_name']), colored("red",row['to_station_name'])]),

# 出发、到达时间

'\n'.join([colored("green",row['start_time']), colored("red",row['arrive_time'])]),

# 历时

self._get_duration(row),

# 一等坐

row['zy_num'],

# 二等坐

row['ze_num'],

# 软卧

row['rw_num'],

# 软坐

row['yw_num'],

# 硬坐

row['yz_num']

]

yield train

def pretty_print(self):

"""

数据已经获取到了,剩下的就是提取我们要的信息并将它显示出来。

`prettytable`这个库可以让我们它像MySQL数据库那样格式化显示数据。

"""

pt = PrettyTable()

# 设置每一列的标题

pt._set_field_names(self.header)

for train in self.trains:

pt.add_row(train)

print(pt)

def cli():

#获取车站资源的网站

url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955"

req=urllib2.Request(url)

#添加消息头

req.add_header=("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 (FoxPlus) Firefox/2.0.0.14")

content=urllib2.urlopen(req).read()

#print content

#diction1={}

diction2={}

#正则表达式匹配出想地名和代码

r=r"|?\W{6,18}|?[A-Z]{3}"

stations=re.findall(r,content)

#print stations

for i in stations:

i1=i.split("|")

#将字符转换成unicode码。

i2=i1[1].decode("utf-8")

#i2=i1[1]

diction1={i2:i1[2]}

diction2.update(diction1)

'''start=raw_input("请输入成都:")

start1=start.decode("utf-8")

print start1

print diction2[start1]

上面是从链接里获取车站资源。

下面输入车站名称直接获取车站代码

并拼接到查询车次的链接里面'''

#需要输入的参数

date=raw_input(u"请输入出发日期(yyyy-mm-dd):")

start=raw_input(u"请输入出发站:")

end=raw_input(u"请输入到达站:")

print date,start,end

#获取车站代码

if diction2.has_key(start.decode("utf-8"))==True:

startcode=diction2[start.decode("utf-8")]

else:

print "查询不到出发站"

if diction2.has_key(end.decode("utf-8"))==True:

endcode=diction2[end.decode("utf-8")]

else:

print "查询不到到达站"

print startcode,endcode

#查票链接

url1="https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate="+date+"&from_station="+startcode+"&to_station="+endcode

#print url1

req1=urllib2.Request(url1)

req1.add_header=("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 (FoxPlus) Firefox/2.0.0.14")

content1=urllib2.urlopen(req1).read()

#print type(content1)

#print content1

dic1=json.loads(content1)

aabb=dic1["data"]["datas"]

#print type(aabb)

#print aabb

trains = TrainCollection(aabb)

trains.pretty_print()

def colored(color,text):

table={

"red":"\033[91m",

"green":"\033[92m",

"nc":"\033[0m"

}

cv=table.get(color)

nc=table.get("nc")

return " ".join([cv, text, nc])

if name=="main":

cli()

运行效果图:

python判断火车票座位_Python3 实现火车票查询工具相关推荐

  1. python判断火车票座位代码_12306 火车票监控Python代码

    import urllib.request as request import http.cookiejar as cookiejar import re import os import smtpl ...

  2. python判断火车票座位代码_Python火车票代码

    前言:我想在源文章里加入下面一段来着,但是实在加不上,报什么405,造成安全威胁,不好意思哈各位,这么点内容还另起一章实在不好意思哈. 千万别一直挂着会封ip的,别问我怎么知道的,我不想说T_T 代码 ...

  3. python 之 Qt Designer 高铁火车票查询工具

    一.制作UI界面 创建一个widget,从Widget Box工具箱中拖拽3个label.3个line Edit.1个Push Button.1个tableWidget.修改控件名后效果如下图,保存并 ...

  4. 基于 Python 的 tkinter 模块制作的名人名言查询工具

    简介:本文主要介绍如何用 Python 内置的 tkinter 写一个查询工具. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  5. python实现火车票查询_Python3 实现火车票查询工具

    项目简介:使用 Python3 抓取 12306 网站信息提供一个命令行的火车票查询工具.通过该项目的实现,可以熟悉 Python3 基础及网络编程,以及 docopt,requests,pretty ...

  6. python刷火车票_Python3实现火车票查询工具

    Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1.  知识点: Pyth ...

  7. 判断火车票座位-Python123编程题库答案-Python从入门到精通挑战台

    判断火车票座位 类型:流程控制‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪ ...

  8. python 火车票查询,Python3实现火车票查询工具

    项目简介:使用Python3抓取12306网站信息提供一个命令行的火车票查询工具.通过该项目的实现,可以熟悉Python3基础及网络变成,以及docopt,requests,prettytable等库 ...

  9. python识别火车票二维码_Python 实现火车票查询工具

    一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行敲一行命令就能获得你 ...

最新文章

  1. sketch如何做设计稿交互_做交互设计不可不知的十大原则
  2. c++ string replace_Java——String类的常用方法总结
  3. swot分析法案例_新媒体小白如何上手案例分析(SWOT分析法)
  4. Lockdoor Framework:一套自带大量网络安全资源的渗透测试框架
  5. 垃圾模块清理工具小程序功能模块0.33
  6. cocos2d-x 中菜单类
  7. 安卓应用安全指南 5.7 使用指纹认证功能
  8. 在vue项目中 如何定义全局变量 全局函数
  9. Error building SqlSession问题
  10. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 10 章 类型转换_10.5. UNION、CASE和相关结构...
  11. 几种防鼠光缆的种类及优缺点分析!
  12. 代理模式实例与解析--实例一:论坛权限控制代理
  13. Linux下查看网络流量常用方法
  14. 在面试时应该如何自我介绍?
  15. 【C语言编程练习】华氏转换为摄氏
  16. 联想笔记本G50-70无线网卡问题
  17. http代理IP的API接口要怎么使用
  18. (一) Marlin-2.1.x 源码解析:G-Code指令的接收、解析与执行
  19. Excel文件导入导出操作
  20. Mysql数据库乱码解决方案

热门文章

  1. 计算机菜单的作用是,菜单
  2. 【Freeswitch从入门到精通】二、初识Freeswitch
  3. C语言家族树管理系统
  4. 《软技能》读书笔记——生产力篇
  5. NSString 和 UInt8 相互转换
  6. 常用计算机英文缩写,计算机常用英文缩写
  7. 华为服务器上安装vm系统,云服务器安装vm教程
  8. mysql解决模糊查询包含关系
  9. 11.练习:用*号打印直角三角形
  10. Xcode Missing file的解决方案