合肥公交换乘模块开发实录 -- 获取/处理数据

(本文写给python初学者.)

 

在中午和晚上空闲的时候, 想写一个公交换乘的东西. 

从头来吧. 

 

取得数据

选择的数据来源,当然是合肥公交集团网站(http://hfbus.cn/). 这个网站访问很慢. 

如何取得全部的公交路线? 很简单, 直接点击"线路查询", 所有的线路就出来了(相当的慢, 我觉得是数据库的原因).

本打算写个小爬虫,后来觉得划不来, 干脆手工copy页面内容吧,也就24页...

 

格式是这样:

【 线路名称 】 1 【 起 点 站 】 南门换乘中心 【 终 点 站 】 火车站 【 运营时间 】 查看详细>> 【 途经站名(上行) 】 南门换乘中心-薛河-张小郢-晨风苑-金东路口-江淮站-南七里站-中国科技大学-安医附院-稻香楼-廻龙桥-飞凤街-四牌楼-小东门-大东门-滁州路-蓝鲸大厦-元一时代广场-胜利广场-火车站 【 途经站名(下行) 】 火车站-胜利广场-元一时代广场-蓝鲸大厦-滁州路-大东门-小东门-四牌楼-飞凤街-廻龙桥-稻香楼-安医附院-中国科技大学-机研所-南七里站-江淮站-金东路口-晨风苑-张小郢-薛河-南门换乘中心 【 线路名称 】 2 【 起 点 站 】 博物馆 【 终 点 站 】 长江批发市场 【 运营时间 】 查看详细>> 【 途经站名(上行) 】 博物馆-市一院-百花井-逍遥津-大东门-金大塘-三里街-铜陵北路-五里井-汽车东站-东七里站-卫材总厂-纺机厂-长江批发市场 【 途经站名(下行) 】 长江批发市场-纺机厂-卫材总厂-东七里站-汽车东站-五里井-铜陵北路-三里街-金大塘-大东门-逍遥津-百花井-市一院-博物馆 【 线路名称 】 3 ...... 

 

不怎么好看的数据, 处理文本是python的强项.

把文件保存为utf-8编码, 别用notepad, 用点高级货(edit plus, ultraedit...).

 

 

了解一下python读文件的方式

f = open('buses.txt', 'r') lines = f.readlines() lines_len = len(lines) for i in range(0, lines_len, 5): print i  

 

仔细观察一下原始数据的格式, 5行可以为一个单位......

嘿嘿, range(0, lines_len, 5), 从头到尾, 每隔5行作为一个单位.

 

我的原则, 先写出来,逐渐oo. 本来python就是很不oo的oopl...

那就定义一个结构, 来表示这5行的内容...

 

class Bus: def __init__(self, raw): self.line_name = '' self.up_stream = [] self.down_stream = [] self.raw = raw def get_text(self): return '' 

 

 

差不多这样了.

下面就简单的分析了:

 

#!/usr/bin/env python # -*- encoding: utf-8 -*- class Bus: def __init__(self, raw): self.line_name = '' self.start_station = '' self.end_station = '' self.up_stream = [] self.down_stream = [] self._process(raw) def _process(self, raw_lines): seperator = ' ' l = raw_lines[0].split(seperator) self.line_name = l[1].strip() l = raw_lines[1].split(seperator) self.start_station = l[1].strip() self.end_station = l[3].strip() #skip line 3 l = raw_lines[3].split(seperator) ups = l[1].strip() self.up_stream = [s.strip() for s in ups.split('-')] l = raw_lines[4].split(seperator) dws = l[1].strip() self.down_stream = [s.strip() for s in dws.split('-')] print self.line_name, self.start_station, self.end_station for s in self.up_stream: print s for s in self.down_stream: print s print '---------------------------------' f = open('buses.txt', 'r') lines = f.readlines() lines_len = len(lines) buses = [] for i in range(0, lines_len, 5): raw = lines[i:i+5] bus = Bus(raw) buses.append(bus)  

 

 

这些处理过的数据存在哪里?  随便了...反正我是存在文本里.

 

下一步就是分析数据了..

 

 

你可能感兴趣的:(数据库,Stream,python,OO,encoding)