福州公交数据采集器含源码(可为'公交查询''都市行'等手机软件提供数据)

  发布一个福州公交数据采集器,近来玩手机的一些公交查询软件的时候,发现它们都存在城市公交数据不足,或者数据很少的情况,比如'来电通'作者的'公交查询'城市就比较少,主要由第三方个人维护;'都市行'虽然有福州公交 数据,但是很多路数据都没有,比如没有606,55等这些大学城线路.现在提供一个俺自己写的.思路如下:

  1.     1.采集地址.http://www.fz-bus.cn/line_Search.asp?xianl=10 (比如10路车)
  2.     2.获取html内容,就是上面中的地址所对应的内容,由于该站点默认必须要看过首页后才能够查看线路,所以需要额外处理重定向问题,这边就是在请求的时候,发送系统提供的会话cookie;
  3.     3.对html内容进行相应解析(正则匹配处理),在解析每一路公交线路的同时,把经过该线路的其他线路作为候选查询站点添加进列表,等第一路车(用户输入)解析完,就开始循环候选线路,直到都解析完毕;
  4.     4.输出,就是根据不同手机公交查询软件的格式,进行相应输出,目前只输出'公交查询'(来电通作者另一作品)格式数据.如果需要输出'都市行'能用的数据,需要自行添加输出方法.

 

     下面是程序截图.(很囧,很槑(*^__^*) ),由于福州公交集团数据更新还算及时,所以抓取到的数据和真实情况差距不大,除了一些站点更名外(主要是公交集团拿来做广告了),比如'市体育中心'更名'xx工业学校'了.

 

lineshot 

     最后面源码(vs2008项目)更新时间2009年3月25日16:12:43

 http://files.cnblogs.com/airwolf2026/BusLineParser.zip

(转载请保留原链接,可以随便修改本程序)

posted @ 2008-09-17 09:52 airwolf2026 阅读(1699) 评论(16) 编辑 收藏

 回复 引用   
#1楼2008-09-17 11:17 | luoweihua7[未注册用户]
麻烦弄一个深圳和广州的公交站点查询
具体网址我也不是很清楚。我是在sz.zuoche.com查询的。不过那个页面和你的页面不一样

 回复 引用 查看   
#2楼[楼主]2008-09-17 11:19 | airwolf2026      
@luoweihua7

主要是我不在当地,即便去弄也无法比对数据的有效性哈.不过可以考虑

 回复 引用 查看   
#3楼2008-09-17 17:37 | 想爱就去爱吧      
very very good
 回复 引用 查看   
#4楼2008-09-18 09:13 | voidarea      
呵呵,采公交的人还挺多的,前阵子我也写过一个采集公交的,http://www.cnblogs.com/voidarea/archive/2008/08/08/BusGather.html
 回复 引用 查看   
#5楼[楼主]2008-09-18 09:23 | airwolf2026      
@ voidarea
呵呵.看了你写的了.还是你的厉害哈.俺本来也想写成接口形式的,可惜耦合的有点过了.

 回复 引用   
#6楼2008-11-22 16:56 | 杨光辉[未注册用户]
你好,谢谢你的代码,这里有个关于正则表达式的问题想问你一下:
有这样一段代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<div>
<ul class="grid">
<li></li>
<li></li>
</ul>
<ul>
<li></li>
<li></li>
</ul>

</div>
</BODY>
</HTML>

现在要获得ul class=grid之间的内容,请问正则表达式怎么写?我在regextester工具软件中,用(?<=<ul\s*class=\\"grid\\").*(?=</ul>),可以解析到其中的内容,但是用到你的代码中怎么写都取不到内容,也许是"没用对。

请指教指教。


 回复 引用   
#7楼2008-11-22 17:15 | 杨光辉[未注册用户]
说白了,我的问题就是html标签中属性用双引号的该怎么写正则,你的例子中用的都是单引号。

先谢谢了。

 回复 引用 查看   
#8楼[楼主]2008-11-22 20:24 | airwolf2026      
楼上童鞋,指教不敢当啊.俺也是那时候才开始认真的学了下正则的,现在几乎忘光啦.

暂时还没有想出怎么写才能匹配你要的内容.但是可以指出的是.你(?<=<ul\s*class=\\"grid\\").*(?=</
这里面的.*已经把换行给排除了.所以你那样写无法匹配到的.不知道是不是你用的regextester匹配错了.还是怎么哈.

你换这个软件用吧.它还会给你解释的.RegexBuddy

 回复 引用 查看   
#9楼2009-03-17 13:32 | 杨圣青      
@杨光辉
除了字符转义之外,截取html标签直接的内容需要使用的是非贪婪匹配:
(?<=<ul\s+class=\"grid\">).*?(?=</ul>)

 回复 引用   
#10楼2009-03-23 16:50 | 琳琳
先看看,,我也会死想将网页上的文字部分爬下来好为以后的分析做数据。

谢哈!!!!!!!!!

 回复 引用 查看   
#11楼[楼主]2009-03-23 17:08 | airwolf2026      
不客气哈.目前这个版本的程序已经无法解析'福州公交'数据啦.
我这一两天改改...
福州公交好多线路都修改了哈.

 回复 引用   
#12楼2009-04-11 15:24 | 千と千寻
非常不错的程序,谢谢作者,支持你的说!!!!
 回复 引用   
#13楼2009-04-11 15:29 | 千と千寻
你太强了,不得不再次谢谢你,帮了我很大的忙!
 回复 引用 查看   
#14楼[楼主]2009-04-11 20:02 | airwolf2026      
--引用--------------------------------------------------
千と千寻: 你太强了,不得不再次谢谢你,帮了我很大的忙!
--------------------------------------------------------
不客气哈.分享是一种快乐和互相提高的过程哈

 回复 引用   
#15楼2009-05-08 13:10 | 林祥龙[未注册用户]
你好,你这个软件抓取的数据十分方便,但我抓取的数据因为格式问题无法转换成软件的数据库格式,能请你修改下软件,改变抓取的数据格式吗?
例如,这个软件抓取的数据格式:
1,白湖亭,5:00,23:00,西门,5:00,23:00,市公交,白湖亭-三盛实业-三叉街新村-三叉街-汇达广场-桥南(福州市二医院)-台江步行街-台江-达道-文化宫-省人民医院-茶亭公园-群众路-新权路口-南门(福州儿童医院)-道山路口-南街(大洋百货)-鼓楼-福三中-西湖-西门,西门-房地产市场-双抛桥-南街(大洋百货)-道山路口-南门(福州儿童医院)-茶亭公园-省人民医院-文化宫-达道-台江-台江步行街-桥南(福州市二医院)-汇达广场-三叉街-三叉街新村-三盛实业-白湖亭, 非空调车价格: 1元 开空调价格: 2元
软件需要的TXT数据格式:
1路↑ 白湖亭-三盛实业-三叉街新村-三叉街-汇达广场-桥南(福州市二医院)-台江步行街-台江-达道-文化宫-省人民医院-茶亭公园-群众路-新权路口-南门(福州儿童医院)-道山路口-南街(大洋百货)-鼓楼-福三中-西湖-西门:{5:00-23:00 5:00-23:00}市区线路 白湖亭5:00-23:00 西门5:00-23:00 夏2元 冬1元 福州公交集团责任有限公司
1路↓ 西门-房地产市场-双抛桥-南街(大洋百货)-道山路口-南门(福州儿童医院)-茶亭公园-省人民医院-文化宫-达道-台江-台江步行街-桥南(福州市二医院)-汇达广场-三叉街-三叉街新村-三盛实业-白湖亭:{5:00-23:00 5:00-23:00}市区线路 白湖亭5:00-23:00 西门5:00-23:00 夏2元 冬1元 福州公交集团责任有限公司

 回复 引用 查看   
#16楼[楼主]2009-05-08 19:32 | airwolf2026      
@林祥龙
同学,你是写程序的不?如果是的话,你直接在源代码那边输出文件格式,那个函数修改下就可以啦.
如果不是.那得等我有空了才能弄哈.