如何抓取(采集)大众点评网的坐标(经纬度)信息
2014-01-16 10:52
267 查看
转载:http://www.site-digger.com/html/articles/20111110/18.html
发布时间:2011-11-10
大众点评的地图位置很精确,但从HTML源码中却找不到坐标(经纬度)信息。
利用地址加载地图往往有比较大的偏差,从这一点上分析它肯定是利用的坐标(经纬度)信息。
分析JS发现原来它是把坐标(经纬度)信息进行了转换(防采集),就是HTML中的poi参数。
例如,http://www.dianping.com/shop/550409 如下图所示poi参数。
在JS中可以找到解码该参数的方法如下:
鲲鹏数据的技术人员给出该decode函数的Python实现如下:
效果演示:在本文的最开始放置了一个查询表单,输入某个商铺的URL点击查询后即可查看到该商铺的坐标(经纬度)信息。
特别说明:该文章为鲲鹏数据原创文章 ,你除了可以发表评论外,还可以转载到你的网站或博客,但是请保留源地址,谢谢!!(尊重他人劳动,你我共同努力)
发布时间:2011-11-10
大众点评的地图位置很精确,但从HTML源码中却找不到坐标(经纬度)信息。
利用地址加载地图往往有比较大的偏差,从这一点上分析它肯定是利用的坐标(经纬度)信息。
分析JS发现原来它是把坐标(经纬度)信息进行了转换(防采集),就是HTML中的poi参数。
例如,http://www.dianping.com/shop/550409 如下图所示poi参数。
在JS中可以找到解码该参数的方法如下:
function decode(C) { var digi=16; var add= 10; var plus=7; var cha=36; var I = -1; var H = 0; var B = ""; var J = C.length; var G = C.charCodeAt(J - 1); C = C.substring(0, J - 1); J--; for (var E = 0; E < J; E++) { var D = parseInt(C.charAt(E), cha) - add; if (D >= add) { D = D - plus } B += (D).toString(cha); if (D > H) { I = E; H = D } } var A = parseInt(B.substring(0, I), digi); var F = parseInt(B.substring(I + 1), digi); var L = (A + F - parseInt(G)) / 2; var K = (F - L) / 100000; L /= 100000; return { lat: K, lng: L } } document.write(decode('HHDFJGZVVIHIJG').lat+','+decode('HHDFJGZVVIHIJG').lng);<br>
鲲鹏数据的技术人员给出该decode函数的Python实现如下:
# coding: utf-8 # 解析大众点评地图坐标参数(POI) # 鲲鹏数据 http://www.site-digger.com def to_base36(value): """将10进制整数转换为36进制字符串 """ if not isinstance(value, int): raise TypeError("expected int, got %s: %r" % (value.__class__.__name__, value)) if value == 0: return "0" if value < 0: sign = "-" value = -value else: sign = "" result = [] while value: value, mod = divmod(value, 36) result.append("0123456789abcdefghijklmnopqrstuvwxyz"[mod]) return sign + "".join(reversed(result)) def decode(C): """解析大众点评POI参数 """ digi = 16 add = 10 plus = 7 cha = 36 I = -1 H = 0 B = '' J = len(C) G = ord(C[-1]) C = C[:-1] J -= 1 for E in range(J): D = int(C[E], cha) - add if D >= add: D = D - plus B += to_base36(D) if D > H: I = E H = D A = int(B[:I], digi) F = int(B[I+1:], digi) L = (A + F - int(G)) / 2 K = float(F - L) / 100000 L = float(L) / 100000 return {'lat': K, 'lng': L} if __name__ == '__main__': print decode('IBGITBZUHGDVEM')
效果演示:在本文的最开始放置了一个查询表单,输入某个商铺的URL点击查询后即可查看到该商铺的坐标(经纬度)信息。
特别说明:该文章为鲲鹏数据原创文章 ,你除了可以发表评论外,还可以转载到你的网站或博客,但是请保留源地址,谢谢!!(尊重他人劳动,你我共同努力)
相关文章推荐
- [信息采集专家]如何抓取文章内容的同时将图片也下载到本地
- 如何用JAVA获取GOOGLE 地图经纬度,地址信息
- 如何通过GPS定位器,通过网页请求获取:经纬度信息和速度,以及中文地址信息
- 百度地图多个兴趣点(经纬度、坐标点)需要同时显示在地图上,如何设置自动缩放等级
- asp采集抓取网上房产信息的代码
- asp采集抓取网上房产信息的代码
- 如何采集百度外卖上的商家信息
- 安卓手机开发,手机上应用百度地图得到了经纬度,如何将这些经纬度信息上传到远程服务器中数据库里?
- 模拟登陆第一步:教你如何用wireshare抓取学校学籍管理系统登陆信息
- 数据挖掘:如何通过百度地图API抓取物体周边地理位置信息
- 如何有效抓取SQL Server的BLOCKING信息
- iOS 开发 如何获得用户当前位置(通过经纬度获得城市、省份等信息)
- 【Android开发技巧】 - 如何获取应用Shortcut在Launcher坐标信息
- 如何有效抓取SQL Server的BLOCKING信息
- 【分享帖】国内主流网络信息采集和页面数据抓取工具盘点
- 如何通过经纬度获取地址信息?
- 解析KML文件并提取coordinates中的经纬度坐标信息
- 如何使用淘宝商品信息采集爬虫-采集电商商品
- GPS信息中提取经纬度坐标信息
- 谷歌地图在ArcMap中打开如何显示坐标为经纬度