您的位置:首页 > 其它

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

2010-12-16 18:15 232 查看
(本文写给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)


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

下一步就是分析数据了..
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐