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

懂点代码的大叔 2018-03-22 22:10:06 ⋅ 702 阅读

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

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

在浏览器地址栏直接敲入:
http://restapi.amap.com/v3/place/text?key=你自己的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: "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对导入后的数据进行调整,随你意喽、

    不信就试一试、

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





全部评论: 0

    我有话说:

    JAVA实现附近范围内公交定位问题

    接上前端实战通过JS抓取城市所有站点线路】获取附近定位信息

    移动H5前端五大性能优化方案(实战

    移动H5前端五大性能优化方案(实战

    为什么要使用 Node.js?这几点你必须知道!

    经过这几年的发展,前端普遍进入了技术深水区,只会Web页面开发已经难以满足企业的需求,Node逐渐成为了刚性技能。 但Node在业务上的使用还没有那么普及,有的时候想用老板还不同意,本文将从4个角度

    前端实战-聊聊JavaScript内存

    内存生命周期、分配内存、使用分配的内存(读写操作),当应用程序不再需要时,释放掉已分配的内存

    Node.js 实战--微信支付系列(二)

    接上一首先我们看一下整体上微信小程序的开发流程图

    MongoDB实战:数据库备份恢复/导出导入

    mongodump命令可以通过参数指定导出的数据量级转存的服务器......

    抖音品质建设 - iOS启动优化《实战

    前言 启动是 App 给用户的第一印象,启动越慢,用户流失的概率就越高,良好的启动速度是用户体验不可缺少的一环。启动优化涉及到的知识点非常多,面也很广,一文章难以包含全部,所以拆分成两部分:原理和

    JavaScript作业队列和微任务

    关键是知道作业队列(也称为微任务队列)如何在Ja...

    MongoDB实战:高级查询----$elemMatchaggregate

    基本的Find查询将在其他章节示例,本文主要针对于遇到的问题解决的方法做个记录,希望可以减少遇到这类问题的

    线性表 - 栈队列

    1.栈 1.栈(stack)是限定仅在表尾进行插入和删除操作的线性表,(先进后出) 2.我们把允许插入和删除的一端成为栈顶(top) 另一端称为栈底(bottom),不含任何数据元素的栈称为空栈

    前端实战:JavaScript 反调试技巧的简单应用(下)

    通过时间差异、DevTools检测(Chrome)、隐式流完整性控制和 代理对象来达到JavaScript反调试目的

    滴滴开源基于 React 的移动端开发组件库-Pile.js

    Pile.js 是滴滴开发的基于 React 的移动端开发组件库。 轻量,易用,包含 52 个交互功能,支持多语言自定义皮肤。可以非常轻松的创建用户交互界面,让前端开发更专注于业务逻辑的实现

    「推荐」通过API网关实现微服务管控-限流,熔断和降级

      今天准备谈下基于API网关来实现微服务治理管控中的服务限流,熔断和降级方面的内容。在前面谈微服务架构的时候也谈到过类似通过Hystrix,Sentinel来是服务限流熔断。包括也不断

    推荐一款前端数据源管理工具 algeb

    ALGEB 简介 这是一个比较抽象的库,一开始可能比较难理解。我写它的初衷,是创建可响应的数据请求管理。在传统数据请求中,我们只是把携带ajax代码的一堆函数放在一起,这样就可以调用接口。但是这种方案不是很灵活,无法解决共享数据源,数据没回来时怎...

    Fes.js v0.4.1 版本发布,一套优秀的中后台系统前端解决方案

    Fes.js 是一套优秀的中后台前端解决方案。提供初始项目、开发调试、Mock接口、编译打包的命令行工具。内置布局、权限、数据字典、状态管理、存储、Api等多个模块。以约定、配置化、组件化的设计思想

    Java Web架构实战:聊一聊前后端分离架构

    RESTful思想和Json数据标准的出现,使得这种交互日益便利。Vue.js 用于构建用户界面的渐进式框架

    MySql实战:写一个简单的存储过程,完成订单定时任务

    前言之前我们分享了MySql的性能优化、索引详解等内容,本文章主要是针对想要入门MySql存储过程的读者,主要实现的业务是订单库里面的超过30分钟没有支付的订单全部置为失效订单......

    【简单】Docker - 实战TLS加密通讯

    快速配置一个最简单的docker TLS加密通讯