引子
一夜间,百度和莆田系的话题院占领了俺的朋友圈。
直到这几天我才幡然觉悟,从小的性病广告,到公交车站的整容广告,到各种一看就伪科学的网站广告,原来师出一派。
本人不善口诛笔伐和道德说教,但好歹也被医院坑过一次,花了800做了个其实应该免费的婚检,自此才知道『军』字打头的医院未必是个好鸟。
昨天当我在github上看到了这个项目: https://github.com/langhua9527/BlackheartedHospital, 心头一震, 原来码农也能为这件事做点什么。
github是一个分布式代码托管仓库,这么说有点装逼,简言之是大家可以在这里进行多人协作,比如我修改了一个片段,他修改了一个片段,github可以帮着做合并。
现在github已经被玩坏了,比如这个找医院的项目,至今有57个人参与其中,3000多个star()。
清洗数据
问题来了,目前只有500个野鸡医院的名字,你要取得这500个医院的电话、省份、 城市、地区、地址供研究,你会怎么做,是一个个去搜索吗?
500个可以手动,如果是5000个呢,每次找到网站并刷出来需要15s,复制黏贴需要3s, 5个字段需要15s,加起来一条记录需要30s,5000条数据需要你一刻不停地高效率干一天半。
码农就是暖男,暖男让你的工作更省心。
如果我们用手机打开百度地图或者高德地图,随手输入一个地址,上海交大、上海交通大学、东川路800号,或在上海的视图搜索交大、交通大学,基本上你能找得到这个地方。
虽然一个地址不是很标准,我们还是能找到标准的信息,有时候还能跳个小框出来,告诉你这个地方的联系电话是多少。
代码片段
如果我们打开chrome,然后打开控制台(windows用户按f12,mac用户 alt + command + r),然后点击network。
然后在搜索框搜索『上海交通大学』,打开控制台,你可以找到一条类似于这样的请求:
http://ditu.amap.com/service/poiInfo?query_type=TQUERY&city=330100&keywords=%E4%B8%8A%E6%B5%B7%E4%BA%A4%E9%80%9A%E5%A4%A7%E5%AD%A6&pagesize=20&pagenum=1&qii=true&cluster_state=5&need_utd=true&utd_sceneid=1000&div=PC1000&addr_poi_merge=true&is_classify=true&geoobj=119.917027%7C30.180823%7C120.390125%7C30.393979
这个url有一段比较关键
keywords=%E4%B8%8A%E6%B5%B7%E4%BA%A4%E9%80%9A%E5%A4%A7%E5%AD%A6
很多字符是不能存在于url中的,所以浏览器会自动转化,各种语言应该都有这种转化的办法,比如javascript提供了2个函数做转换,我们可以在console里对这堆乱码进行试验,我们用encodeURI函数把中文转乱码,又用decodeURI转换成中文:
因此,如果我们有一堆可疑医院的列表,一条条告诉程序,程序把刚才url中key后面的乱码用下面的函数处理替换,就可以开始搜集信息了。
encodeURI('你想要搜索的地址')
我们可以看看这个接口包含的信息:
随意下载
爬虫的细节就先略过了,如果调用太频繁,有时候会被高德封掉,最简单的方法可疑让任务排个队,每次完了休息一小会。
这份数据大家可以免费地使用,也提供了json和csv的格式可供下载,因为初始数据修改过, 目前还没有合并到主项目中。
https://github.com/zhouningyi/BlackheartedHospital
所有的数据都为网友采集,并不为准,大家可以利用互联网,开始进一步的调查。
谢谢每天我们用来导航的地图服务,利用这个,我们批量清洗出了可疑医院的详细信息。
可疑医院地图
对于这份数据,顺便做了一份简单的热力图,可以点击每个热点看详细信息: