(本文写给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)
这些处理过的数据存在哪里? 随便了...反正我是存在文本里.
下一步就是分析数据了..