开头先放上效果展示

在命令行输入 python bus.py -i,显示app基本信息,如下:

在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下:

红色的B说明在梅园附近有一辆438公交车,并且会不断刷新。

命令行显示输出及美化

前文我们实现了获取公交车位置的函数,现在需要将其美化并输出到命令行中,这里分别使用docopt/prettytable/colorama三个库。

prettytable库和colorama库

简单来说,prettytable可以将数据以表格的形式打印,colorama可以设置命令行中字体的颜色,直接上代码:

from prettytable import PrettyTable

from colorama import Fore, init

# colorama需要init使用

init()

# 函数接受4个参数

# data0/data1分别是往返站点信息的list,其中的元素也是list,结构是['id', 站名, 是否有公交车]

# time0/time1是往返线路运营时间

def print_direction_and_station(data0, data1, time0, time1):

pt = PrettyTable()

# 设置表头,为了美观往返之间留一个空列

pt.field_names = ['#0', 'UP:' + time0, 'Bus0', ' ', '#1', 'DOWN:' + time1, 'Bus1']

# 往返路线的站数可能不一致,取最大值作为行

for i in range(max(len(data0), len(data1))):

if i >= len(data0):

r0 = [' '] * 3

else:

r0 = data0[i]

# 'B'表示该车站附近有公交车

if r0[2] == 'B':

# 设置文本的颜色为红色

r0[1] = Fore.RED + r0[1]

# 去除红色,否则后面全是红的

r0[2] = r0[2] + Fore.RESET

if i >= len(data1):

r1 = [' '] * 3

else:

r1 = data1[i]

if r1[2] == 'B':

r1[1] = Fore.RED + r1[1]

r1[2] = r1[2] + Fore.RESET

pt.add_row(r0 + [' '] + r1)

# 打印结果

print(pt)

docopt库

docopt可以读取一段字符串(通常是__doc__),并将其解析为命令行参数,例如在bus.py开头输入以下内容:

"""

Usage:

bus

bus [-ih]

Options:

-h Show help information

-i Show application information

Example:

bus 438 Show stations, directions and positions of bus 438

"""

并使用from docopt import docopt引入模块,结尾代码如下:

if __name__ == "__main__":

args = docopt(__doc__)

print(args)

直接使用python bus.py运行,输出的结果是:

从中不难发现,docopt解析了__doc__中Usage的部分,将参数以字典的形式返回,我们改变输入命令的参数,返回的args字典对应的value也将不同。

前文中我们获取的公交车位置信息需要经过一些处理才能传给print_direction_and_station函数,结合命令行参数,代码如下:

if __name__ == "__main__":

args = docopt(__doc__)

b_code = args['']

# 如果输入了参数

if b_code:

# 获取往返线路id

[d0, _], [d1, _] = get_bus_direction(b_code)

# 获取往返车站

stations0 = get_bus_stations(b_code, d0)

stations1 = get_bus_stations(b_code, d1)

# 进入循环以刷新

while 1:

direction0 = []

direction1 = []

status0 = get_bus_status(b_code, d0, len(d0))

status1 = get_bus_status(b_code, d1, len(d1))

pos0 = status0['bus_position']

# pos0_id/pos1_id 是有公交车的车站id

pos0_id = [p['station_id'] for p in pos0]

pos1 = status1['bus_position']

pos1_id = [p['station_id'] for p in pos1]

# 两个for循环构建传给print_direction_and_station参数

for i, d in enumerate(stations0):

bus = ' '

if str(i+1) in pos0_id:

bus = 'B'

direction0.append([i+1, d, bus])

for i, d in enumerate(stations1):

bus = ' '

if str(i + 1) in pos1_id:

bus = 'B'

direction1.append([i+1, d, bus])

print_direction_and_station(direction0, direction1, status0['operation_time'], status1['operation_time'])

# 每5s刷新一次

sleep(5)

此时输入python bus.py 438,就可以显示上文图中的结果了,python bus.py -i也是同理,自定义一个print信息的函数即可。

python 抓取 实时公交_Python实现命令行监控北京实时公交之二相关推荐

  1. python实时定位_Python实现命令行监控北京实时公交之一

    开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: 在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下: 红色的B说明在梅 ...

  2. Python实现命令行监控北京实时公交之一

    开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: 在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下: 红色的B说明在梅 ...

  3. python抓取网站图片_python抓取图片示例 python抓取网页上图片

    python抓取网页上图片 这个错误时是什么意思 下面是代码 import re import urllib.request imp正则表达式匹配的url有错误 for x in add: print ...

  4. python抓取数据包_python抓数据包

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 前言:数据科学越来越火了,网页是数据很大的一个来源. 最近很多人问怎么抓网页数据 ...

  5. python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  6. python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?

    开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...

  7. python抓取股票数据_Python股票处理之一_获取国内股票数据

    1. 安装支持库 $ pip install panda $ pip install tushare 2. 说明 Pandas是数据分析工具包 TuShare是国内股票数据抓取工具,除了股票的实时和历 ...

  8. python抓取微博数据_Python爬虫实现半自动发微博

    Python实现半自动发微博[用COOKIES代替模拟登录:用WAP版微博代替网页版微博:每次还要改post数据的URL...半半自动的感觉] 微博的内容是从糗事百科抓取的最热段子以及某网站的每日晚安 ...

  9. python抓取网页信息_python抓取网页中的动态数据

    一.概念 网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念,动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到浏览器 ...

最新文章

  1. 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架
  2. 台积电2nm工艺重大突破!
  3. 如何读取服务器信息吗,New Features Introduced in IIS 10.0 Version 1709
  4. java的System.getProperty()方法能够获取的值
  5. jps显示当前所有java进程pid
  6. css3 transform实现水平和垂直居中
  7. 摇一摇 声音 html5,HTML5摇一摇以及音频播放问题优化总结
  8. 【知识补充】对称加密、非对称加密、数字签名与DDoS攻击
  9. HackBrowserData 一键导出 浏览器保存的登录密码、历史记录、Cookies、书签
  10. BootstrapTable静态刷新表格
  11. Dubbo新手入门实例HelloWorld(zookeeper)
  12. 纯java程序意味着什么_Java到底是不是一种纯面向对象语言?
  13. 今 天看到我十年前的一篇技术文章,想到不知不觉学编程十多年了,,
  14. Android的Button监听
  15. 机械优化设计进退法c语言程序,机械优化设计powell法程序
  16. EntityFramework在root目录web.config中的配置设置
  17. java打包后找不到图片路径,解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...
  18. 前端入门 前端实战项目 JS
  19. NYOJ:33-蛇形填数
  20. 视频号还是直播?2021年微信财富密码预言

热门文章

  1. 65个源代码网站(好辛苦才收集的)
  2. mysql trim_mysql trim函数用法实例
  3. 漫画:架构师是吧?什么是哈希轮?
  4. 云南高中计算机教师招聘试题及答案,2020云南教师招聘考试模拟试题及参考答案(三)...
  5. Python3 英文字母转换哥特式字体
  6. Tradingview Pine Script策略完整教程
  7. 同创永益携手华为云Stack发布灾备管理联合解决方案
  8. 2022湖南多校对抗赛第四场
  9. OGG-01004|OGG 初始化数据问题处理
  10. 关于dom的一些基础知识-来自w3shool.com.cn