[吴道长作品]记一次不成熟的爬虫

2017年,大家很期待吴道长的小黄文吧……今天来了,写完开场之后,虾神就闭嘴了,保留原汁原味的道长风格小黄文……

最近换了一个工种,成了闽清十万大山里的水库巡查员。所以晚上比较有时间进行放空自己个儿。

好久不见的老板在QQ上联系了,看看能不能帮忙搞一份某城市的公交站点数据,搁过去,我估计就是翻着白眼说手绘哪!现在嘛,我估摸着爬虫估计就差不多能搞定了。咨询了一下魔都浦西的马总,确实可行并且发了API资料,着手就开始写代码了。

老板问了我多久能出结果,我报大概了1个星期的工时。其实我觉得大概半天就能写完,但是以我拖延症的尿性,我觉得我没那么快能写完,而且还要调试,而且做的中途指不定会出什么幺蛾子,额,乌鸦嘴,确实出幺蛾子了。

爬虫

那么关键就是怎么定制这个URL?高德API有完整的URL请求参数结构表:

[吴道长作品]记一次不成熟的爬虫

需求中要爬的就是公交站点,那么就需要types中查询公交的POI编码——【150700】:

[吴道长作品]记一次不成熟的爬虫

URL='http://restapi.amap.com/v3/place/text?&types=150700&city=370100&citylimit=true&output=json&offset=20&page=1&key=……………’

按照约定,返回是一份json文件,用simplejson这个包,就可以对结果进行解析,提取需要的内容。

Json文件结构可以参考高德API的返回结果参数说明:

[吴道长作品]记一次不成熟的爬虫

解析后站点的名字,经纬度及该站牌所经过的线路,我存成一份txt,优势在于比excel更方便打开读取。

[吴道长作品]记一次不成熟的爬虫

解析

初步已经有站点信息,那么我自己再加个需求,以每条线路为单位,反演出它的所经过的站点,这里要说到我的一个代码习惯,在把数据封存成一个现实文件的同时,我会在设计一个字典DictKey来作为一个全局变量来存这些信息,为啥不用列表,在于字典有key而且嵌套的结构更加鲜明。只是我有一个疑虑,这么做会不会增加对内存的压力,毕竟我做的东西的数据量很小。如果涉及到大数据,就不好说了。

这里我做了一个涵盖所有线路的列表Alist,我只需要迭代遍历去判断Alist,IN or NOT IN 在DictKey中的value就行。然后就是再存成一个字典,再打印出来。

[吴道长作品]记一次不成熟的爬虫

这里貌似把工作都完成了,之后我做验证时候,发现线路中会莫名缺了一些站点,导致这条线路不全,不断在代码间加 print,无果,折腾了一个晚上,这就是之前所谓的幺蛾子。最后我在迭代print中看到了两个名字相同的站点,日,一个城市两个站点叫一样的名儿,这让我想起了济南著名的大观园站,十字路口各有一个站点,都叫大观园站,每个站点经过的线路还不尽相同,当初的规划师脑子让驴逼夹过。

[吴道长作品]记一次不成熟的爬虫

既然知道问题,那就是解决问题。多加了一个 if判断,遇重加编号:

[吴道长作品]记一次不成熟的爬虫

如此这般,完成了,后期为了私人共享,我做成了一个pyt工具:能够选好山东某个市直接爬取数据。

[吴道长作品]记一次不成熟的爬虫

 结果

[吴道长作品]记一次不成熟的爬虫

散点大致能框架出聊城的交通网络,蓝色是我在学校出行唯二的交通工具—7路,这一头是聊大东校医院,那一头是一个冤家,,,

这边想到老北京一个典故:有一样吃食,叫铜锅涮肉,讲究是师傅将羊肉细细切成薄片后一涮的滑嫩。在簋街,有一个字号叫裕德孚,现在掌柜的爷爷于德龙,在当年切肉师傅行里唯一拿的是是全角活工资,即抓羊,砸羊,醒肉,切肉一整套活;而其他师傅最多只能拿个半角活的工资。或许最近我就做了一个全角活,至于您怎么下口,就看您怎么挖掘可视化了。

[吴道长作品]记一次不成熟的爬虫

本文作者为吴道长,授权虾神独家发表。

版权归属吴道长所有。