合肥公交换乘模块开发实录 -- 获取/处理数据
2010-12-16 18:15
232 查看
(本文写给python初学者.)
在中午和晚上空闲的时候, 想写一个公交换乘的东西.
从头来吧.
如何取得全部的公交路线? 很简单, 直接点击"线路查询", 所有的线路就出来了(相当的慢, 我觉得是数据库的原因).
本打算写个小爬虫,后来觉得划不来, 干脆手工copy页面内容吧,也就24页...
格式是这样:
不怎么好看的数据, 处理文本是python的强项.
把文件保存为utf-8编码, 别用notepad, 用点高级货(edit plus, ultraedit...).
了解一下python读文件的方式
仔细观察一下原始数据的格式, 5行可以为一个单位......
嘿嘿, range(0, lines_len, 5), 从头到尾, 每隔5行作为一个单位.
我的原则, 先写出来,逐渐oo. 本来python就是很不oo的oopl...
那就定义一个结构, 来表示这5行的内容...
差不多这样了.
下面就简单的分析了:
这些处理过的数据存在哪里? 随便了...反正我是存在文本里.
下一步就是分析数据了..
在中午和晚上空闲的时候, 想写一个公交换乘的东西.
从头来吧.
取得数据
选择的数据来源,当然是合肥公交集团网站(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)
这些处理过的数据存在哪里? 随便了...反正我是存在文本里.
下一步就是分析数据了..
相关文章推荐
- iOS项目开发中遇到CRASH:重写Setter对服务器获取的数据做空值的过滤处理
- react项目实战(权限模块开发七)通过ajax技术获取数据
- Qt实战之开发软件数据获取助手(eventFilter处理鼠标按下,event处理鼠标松开)
- 微信企业号开发:获取数据权限错误如何处理
- 微信企业号开发:获取数据权限错误怎样处理
- 爬虫 Http请求,urllib2获取数据,第三方库requests获取数据,BeautifulSoup处理数据,使用Chrome浏览器开发者工具显示检查网页源代码,json模块的dumps,loads,dump,load方法介绍
- 大数据模块开发之数据预处理
- 股票数据获取处理和显示的开发笔记
- 微信公众平台开发----自定义菜单、消息处理及获取OpenID(C#)
- Linux平台下基于BitTorrent应用层协议的下载软件开发--消息处理模块(signal_handler.h)
- Kinect for Windows V2和V1对比开发___骨骼数据获取并用OpenCV2.4.10显示
- 获取GET/POST提交的数据,并处理中文问题
- python中struct模块之字节型数据的处理
- android:获取APP开发中需要的数据
- 基于Metronic的Bootstrap开发框架经验总结(7)--数据的导入、导出及附件的查看处理
- Android应用开发之获取web服务器xml数据
- 大数据处理之道 (htmlparser获取数据<一>)
- 小程序post提交获取数据,与服务器通信-小程序支付开发-视频教程5
- InfoPath开发实战(3):获取SQL Server中的数据
- iOS开发小技巧--适当的清空模型中的某个数据,达到自己的需求,记得最后将数据还原(百思项目评论页面处理最热评论)