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