一. prettytable

1. 简介:可以将输出内容按照表格方式整齐输出。
2. 安装:pip install prettytable
3. 导入:from prettytable import PrettyTable
4. 示例:
from prettytable import PrettyTable
table = PrettyTable(["id", "name"])
table.add_row([1, "lili"])
table.add_row([2, "rose"])
table.add_row([3, "nancy"])
table.add_row([4, "puppet"])
print(table)

效果:

5. 使用

5.1 创建表
pt = PrettyTable()
5.2 按行/列添加
pt.add_row()       # 行
pt.add_column()   # 列

6. 输出

6.1 直接输出
print(pt)
6.2 无表格框输出
print(pt.get_string())

二. split

1. 作用:切分字符串

2. 示例:
"2:3:4:5".split(":")
"|a|b|c".split("|")

结果

["2", "3", "4", "5"]
["", "a", "b", "c"]

三. \u4e00”和“\u9fa5

1. 简介:判断字符串中是否包含中文

“\u4e00”和“\u9fa5”是unicode编码,是unicode表中的汉字的开始和结束。[\u4e00-\u9fa5]+,[]表示内容,+代表至少出现一次。

四. print和pprint区别

1. 简介:

大致相同,但pprint打印更加完整,每行为一个数据结构,方便阅读,对于较长的数据,print打印都在一行,pprint分行打印

五. colorama

1. 简介:给字体着色

2. 安装:pip install colorama

3. 导入:from colorama import init, Fore, Back, Style

说明:
init():初始化,其中可以传入参数,autoreset 。默认值为 False ,如果设置为 True,它就会在每一次输出语句之后自动清空格式。
Fore:前景色(即字体颜色)
Back:背景色
Style:改变字体的显示模式。
三个属性可设置的参数如下:
Fore: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Back: BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, RESET.
Style: DIM, NORMAL, BRIGHT, RESET_ALL

4. 示例

from colorama import init, Fore, Back, Styleinit()
print(Fore.LIGHTGREEN_EX + "some red text")
print(Back.RED + "and with a green background")
print(Style.BRIGHT + "and in dim text")
print(Style.RESET_ALL)
print("back to normal now!!")

效果

六. 正文

有了上面的基础铺垫,再看代码会简单很多
tickets.py

"""Train tickets query via command-line.火车票通过命令行查询。
Usage:tickets [-gdtkz] <from> <to> <date>Options:-h,--help   显示帮助菜单-g          高铁-d          动车-t          特快-k          快速-z          直达Example:tickets beijing shanghai 2020-01-25"""
import json
import colorama
from prettytable import PrettyTable
from colorama import init, Fore, Back, Style
from station import station
import requests
from colorama import init, Fore
from docopt import docoptinit()                                  # 使用colorama前的初始化def cli():arguments = docopt(__doc__)from_station = station.get(arguments['<from>'])        # station是个字典to_station = station.get(arguments['<to>'])date = arguments['<date>']# 构建url,输入车站名字,直接从station字典中获得相对应的字母代码url = 'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.train_date={}' \'&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(date, from_station, to_station)# print("这是网址:", url)options = ''.join([key for key, value in arguments.items() if value is True])headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, ''like Gecko) Chrome/78.0.3904.87 Safari/537.36','Cookie': 'JSESSIONID=0FCBD07FA01EA1713255920101896AC0;'' route=c5c62a339e7744272a54643b3be5bf64;'' BIGipServerpool_passport=384631306.50215.0000; RAIL_EXPIRATION=1582955512068; ''RAIL_DEVICEID=qUANl2BZU-iRhsSMlPYc2Ut5AU-XbI_''XGAWLMc6T1MVYaIeLtvh3KoZuNsAM4fIIznGMn7Z5bx246WADUQl2C2AZhqvnwJmYH-3DRnXMvWRItWlMtwfayV6YckM8VU7UMhb5''R6cJChWUeBOyEDz-LP_GYdUBPGZ7; ''_jc_save_fromStation=%u5317%u4EAC%2CBJP; _jc_save_toStation=%u4E0A%u6D77%2CSHH; ''_jc_save_toDate=2020-02-26; ''_jc_save_wfdc_flag=dc; BIGipServerotn=2062024970.64545.0000; _jc_save_fromDate=2020-02-27'}r = requests.get(url, verify=False, headers=headers)    # 添加verify=False参数不验证证书available_trains = r.json()['data']['result']           # 返回列表station_map = r.json()['data']['map']                  # 返回的是字典形式,地名和代号一一对应,下面要用到# print(station_map)  # {'AOH': '上海虹桥', 'VNP': '北京南', 'SNH': '上海南', 'BJP': '北京', 'SHH': '上海'}# 做表格,设置表头table = PrettyTable(["车次", "出发站", "到达站", "出发时间", "到达时间", "历时", "特等座", "一等座", "二等座", "软卧","硬卧", "软座", "硬座", "无座"])for data in available_trains:list = data.split("|")        # 按照“|” 切分# print(list)if list[1] == '列车停运':      # 以列车停运开头的那几行均不是continueline_nun = list[3]    # 车次from_sta = list[6]to_sta = list[7]start_time = list[8]stop_time = list[9]cost_time = list[10]TDZ = list[32] or "--"   # 特等座     # 如果没有信息,用--显示YDZ = list[31] or "--"  # 一等座EDZ = list[30] or "--"  # 二等座RW = list[23] or "--"  # 软卧YW = list[28] or "--"  # 硬卧RZ = list[27] or "--"  # 软座YZ = list[29] or "--"  # 硬座WZ = list[26] or "--"  # 无座# 表格添加列 按照表格方式整齐地输出+对输出的每个字符和“|”进行着色table.add_row([line_nun, Fore.LIGHTRED_EX+station_map[from_sta]+Fore.RESET,Fore.LIGHTBLUE_EX + station_map[to_sta]+Fore.RESET,Fore.LIGHTRED_EX+start_time+Fore.RESET, Fore.LIGHTGREEN_EX+stop_time+Fore.RESET,cost_time, TDZ, YDZ, EDZ, RW, YW, RZ, YZ, WZ])print(table)if __name__ == '__main__':cli()

parse_station.py

"""提取地址及其对应的代号"""
import re
import requests
from pprint import pprint# 地址和代号网址
url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8955'
# 获取url
response = requests.get(url, verify=False)    # 移除SSL认证
# 正则提取中文和代号  格式:列表 内包含多个元组,元组形式 (‘上海’,‘SHH’)
station = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)', response.text)   # 解析页面中中文和大写字母
# 定义打印信息 缩进4个空格
pprint(dict(station), indent=4)

1. 其实全程用到两个url
url1:根据输入的“起始站”+“终点站”+“日期”来查询结果的页面,所以需要模拟这个url。
url2:解析地名和地名代号的页面。
2. available_trains的打印结果如下

“列车停运”部分不是我们需要的,黄色框选的地方才是
3.for data in available_trains:
list = data.split("|")
print(list) 将available_trains分割后,打印结果如下:

其余不解释了,代码很简短。
最终效果(都能对的上,配色可以自己调,green/red/blue)

文件下载
https://github.com/Charging01/ticket-query.git

python3 实现火车票查询 代码+知识点相关推荐

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

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

  2. Python3 实现火车票查询工具

    https://www.shiyanlou.com/courses/623/labs/2072/document Python 实现火车票查询工具 一.实验简介 当你想查询一下火车票信息的时候,你还在 ...

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

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

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

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

  5. python实现火车票查询工具_Python 实现一个火车票查询的工具

    原标题:Python 实现一个火车票查询的工具 作者 sexycoder 本文转载自简书,转载需授权 使用 python 实现一个查询火车票的小工具 主要功能: 输入出发车站,到达车站,时间,然后返回 ...

  6. python12306源码_Python动刷新抢12306火车票的代码(附源码)

    Python动刷新抢12306火车票的代码(附源码) 用python另一个抢票神器,你get到了吗? 2017年时间飞逝,转眼间距离2018年春节还有不到1个月的时间,还在为抢不到火车票发愁吗?作为程 ...

  7. 12306火车票查询——Python

    欢迎加入Python学习交流QQ群:535993938  禁止闲聊 ! 名额有限 ! 非喜勿进 ! 最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详 ...

  8. python作业火车票订购系统_Python实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

  9. python作业火车票订购系统_Python脚本实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都具体给共享出来.(注重使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

最新文章

  1. 谷歌创始人“退位”,印度CEO独挑大梁
  2. Qt多线程中的信号与槽
  3. python flask 学习与实战
  4. 肝!超好懂的 Python 文件读写教程!
  5. 让你事半功倍的小众 Python库
  6. Java设计模式学习总结(9)——结构型模式之过滤器模式(标准模式)
  7. PopupWindow点击空白区域消失
  8. 21.实例 --- location
  9. Java开发笔记(一百三十二)Swing的表格
  10. Elasticsearch版本控制理解
  11. PHP操作MySQL数据库常用函数
  12. 计算机极差全距符号,极差相对值的计算公式
  13. 【解决方法】Windows Server 2016/2019无法安装Flash
  14. pytest -------- 生成测试报告+ 定制报告(allure生成报告)测试报告生成工具Allure 集成到pytest中【十三】
  15. word中间有条横线怎么删除, 快捷生成的横线如何删除
  16. Word2007/2003常用快捷键
  17. MNIST 数据集分类
  18. Pr安装完BCC插件后出现“找不到引入口”的窗口,从而使用不了Pr怎么办------如何卸载BCC,重新启用P
  19. 在职校学计算机有好的出路吗,如何学好计算机(在职校学计算机有出路吗)
  20. 指定路径列表批量拷贝文件+Windows批处理命令大全

热门文章

  1. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
  2. uni-app动态设置原生标题左侧按钮
  3. 超简单看懂匈牙利算法
  4. Hexo sakura整理
  5. ROS中工作空间和功能包的创建以及发布者Publisher的实现
  6. 计算机丢失系统文件如何找回,电脑引导文件丢失怎么办 引导文件丢失恢复方法...
  7. 苹果计算机安装应用软件,Mac苹果电脑怎么安装软件 Mac苹果电脑安装软件新手教程...
  8. Idea小技巧 之 折叠代码块
  9. R 软件的下载与安装
  10. 心态很容易受别人影响_太容易被别人影响,我上辈子可能是个“复印机”