前端实战篇:经过JS抓取城市全部站点与线路

先确认数据来源,既然项目内使用高德地图,那就去找高德API好了,良久以后以为高德搜索服务API貌似能够搞一搞,竟然能够定位数据城市位置,那敢情好,赶忙先来一发试试。jquery

在浏览器地址栏直接敲入:
http://restapi.amap.com/v3/place/text?key=你本身的KEY&types=150700&city=410102&citylimit=true&offset=50&page=1

参数说明:ajax

    key:本身去高德API注册帐号申请去,反正免费sql

    types:查询类型,高德提供的POI分类编码表(以下图),150702表示公交车站,可是却查不到数据,只能用150700车站相关来搞数据了。数据库

图片

POI分类编码表json

    city:查询城市,高德有提供的城市编码表(以下图),410100表示郑州,0371也表示郑州,410102表示中原区api

图片

城市编码表浏览器

    citylimit:是否只返回指定城市数据(固然要true,我只要郑州市的数据,false表示优先城市可是依然不作范围限制)app

    offset:每页条数,高德说最好不超过25(竟然还要翻页,好吧,毕竟是接口而不是专门让我抓数据用,我为啥写50,是由于就算你写再多他也给你强制50条,估计是为了性能考虑)异步

    page:页数async

    为何我不用市而是用区数据呢?这就是高德接口的意思啦~(你一次请求那么多干吗?是否是要搞事情?量这么大数据库不要抗压哇?)最多给你900条

图片

郑州市数据


    不用就不用呗,要是太简单了还写个毛线脚本,那就循环多请求几回好了,把郑州市的区都来一遍,嗯,不错,中原区数量还好,696个, 其余的也都很少

图片

中原区数据


    得,数据有了,仍是json格式的,直接用起来哇,搞起,直接放代码


var context ="";function snatch(){  

var district = ["410102", "410103", "410104", "410105", "410106", "410108", "410122"];//循环多个区域    for (var k = 0; k < district.length; k++) {        

    var pagecount = 1;        

    var page = 1;         //每一个区域数据须要翻页(API缘由)     while(1==1) {          $.ajax({url: "http://restapi.amap.com/v3/place/text?key=你本身的KEY&types=150700&city=" + district[k] + "&citylimit=true&output=json&offset=50&page=" + page,             

            async: false,             

            success: function (json) {             //没有数据就跳出循环去找下个区             if (json.count != 0) {                 pagecount = Math.ceil(json.count / 49);             }               //拼接内容             for (var i = 0; i < json.pois.length; i++) {                 

                var id = json.pois[i].id;                 

                var name = json.pois[i].name;                

                var address = json.pois[i].address;                

                var location = json.pois[i].location;                content += id + "   " + name + "    " + address + "     " + location + "\r\n";             }            }          });          page++;          

          if(pagecount == page){            

            break;          }      }    }    download(); } 

function download() {    

    var file = new File([content], "站点与线路数据.txt", {type: "text/plain;charset=utf-8"});    

saveAs(file); }    



    

逻辑应该算是比较严谨了,ajax里面async: false参数须要加上,表示不使用异步,若是不加的话for循环跑完了你ajax的数据还没跑完,后面剩余的次数就不执行了

数据我拿了“id,站点名称,该站有哪些线路,车站的坐标”四组数据,导出txt文档,而后导入数据库

    (由于是纯JS脚本没有写数据库链接啥的,因此使用了FileSaver.js这个小插件来作导出txt,固然jquery.js也是要有的,否则ajax从哪来)

<script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script><script src="http://www.jq22.com/demo/FileSaver20161213/FileSaver.min.js"></script>

    在网页上随便一转悠找了这俩js直接引入,这样连js下载啥的都省了,执行后10秒左右,数据已经有了

图片


    接下来就是把数据导入数据库了,新建了四个字段,而后用navicat直接导入到表中

图片

导入txt


图片

用“|”分隔符区分字段


图片

数据绑定字段


图片

完成数据

    若是须要统计线路或者坐标经纬度分离啥的,能够对js数据格式调整或者用sql对导入后的数据进行调整,随你意喽、

    不信就试一试、