python 抓取 实时公交_Python实现命令行监控北京实时公交之二
开头先放上效果展示
在命令行输入 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实现命令行监控北京实时公交之二相关推荐
- python实时定位_Python实现命令行监控北京实时公交之一
开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: 在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下: 红色的B说明在梅 ...
- Python实现命令行监控北京实时公交之一
开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: 在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下: 红色的B说明在梅 ...
- python抓取网站图片_python抓取图片示例 python抓取网页上图片
python抓取网页上图片 这个错误时是什么意思 下面是代码 import re import urllib.request imp正则表达式匹配的url有错误 for x in add: print ...
- python抓取数据包_python抓数据包
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 前言:数据科学越来越火了,网页是数据很大的一个来源. 最近很多人问怎么抓网页数据 ...
- python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...
Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...
- python抓取微博评论_Python爬取新浪微博评论数据,你有空了解一下?
开发工具 Python版本:3.6.4 相关模块: argparse模块: requests模块: jieba模块: wordcloud模块: 以及一些Python自带的模块. 环境搭建 安装Pyth ...
- python抓取股票数据_Python股票处理之一_获取国内股票数据
1. 安装支持库 $ pip install panda $ pip install tushare 2. 说明 Pandas是数据分析工具包 TuShare是国内股票数据抓取工具,除了股票的实时和历 ...
- python抓取微博数据_Python爬虫实现半自动发微博
Python实现半自动发微博[用COOKIES代替模拟登录:用WAP版微博代替网页版微博:每次还要改post数据的URL...半半自动的感觉] 微博的内容是从糗事百科抓取的最热段子以及某网站的每日晚安 ...
- python抓取网页信息_python抓取网页中的动态数据
一.概念 网页中的许多数据并不是写死在HTML中的,而是通过js动态载入的.所以也就引出了什么是动态数据的概念,动态数据在这里指的是网页中由Javascript动态生成的页面内容,是在页面加载到浏览器 ...
最新文章
- 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架
- 台积电2nm工艺重大突破!
- 如何读取服务器信息吗,New Features Introduced in IIS 10.0 Version 1709
- java的System.getProperty()方法能够获取的值
- jps显示当前所有java进程pid
- css3 transform实现水平和垂直居中
- 摇一摇 声音 html5,HTML5摇一摇以及音频播放问题优化总结
- 【知识补充】对称加密、非对称加密、数字签名与DDoS攻击
- HackBrowserData 一键导出 浏览器保存的登录密码、历史记录、Cookies、书签
- BootstrapTable静态刷新表格
- Dubbo新手入门实例HelloWorld(zookeeper)
- 纯java程序意味着什么_Java到底是不是一种纯面向对象语言?
- 今 天看到我十年前的一篇技术文章,想到不知不觉学编程十多年了,,
- Android的Button监听
- 机械优化设计进退法c语言程序,机械优化设计powell法程序
- EntityFramework在root目录web.config中的配置设置
- java打包后找不到图片路径,解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...
- 前端入门 前端实战项目 JS
- NYOJ:33-蛇形填数
- 视频号还是直播?2021年微信财富密码预言
热门文章
- 65个源代码网站(好辛苦才收集的)
- mysql trim_mysql trim函数用法实例
- 漫画:架构师是吧?什么是哈希轮?
- 云南高中计算机教师招聘试题及答案,2020云南教师招聘考试模拟试题及参考答案(三)...
- Python3 英文字母转换哥特式字体
- Tradingview Pine Script策略完整教程
- 同创永益携手华为云Stack发布灾备管理联合解决方案
- 2022湖南多校对抗赛第四场
- OGG-01004|OGG 初始化数据问题处理
- 关于dom的一些基础知识-来自w3shool.com.cn