龙空技术网

前端实战篇:通过JS抓取城市所有站点与线路

程序员前沿 82

前言:

如今姐妹们对“for循环ajax异步”大体比较关心,兄弟们都需要剖析一些“for循环ajax异步”的相关文章。那么小编同时在网摘上汇集了一些对于“for循环ajax异步””的相关知识,希望兄弟们能喜欢,看官们快快来学习一下吧!

公司正计划做一个公交定位项目,木有站点数据和线路数据肿么办,总不能胡编乱造把,万一造的不准车站与线路跑河里去了多尴尬,高德与百度地图不是有车站数据么?把站点与线路数据抓出来不就好了么,说干就干,其他的爬虫脚本也用不着,直接JS开干。

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

在浏览器地址栏直接敲入:你自己的KEY&types=150700&city=410102&citylimit=true&offset=50&page=1

参数说明:

key:自己去高德API注册账号申请去,反正免费

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

POI分类编码表

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

城市编码表

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

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

page:页数

为什么我不用市而是用区数据呢?这就是高德接口的意思啦~(你一次请求那么多干嘛?是不是要搞事情?量这么大数据库不要抗压哇?)最多给你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: "你自己的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=""></script><script src=""></script>

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

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

导入txt

用“|”分隔符区分字段

数据绑定字段

完成数据

如果需要统计线路或者坐标经纬度分离啥的,可以对js数据格式调整或者用sql对导入后的数据进行调整,随你意喽、

不信就试一试、

更多精彩内容请关注“IT实战联盟”哦~~~

标签: #for循环ajax异步 #js定位城市 #jquery加载js文件路径 #jquery表格城市分布 #jquery首字母城市