如何抓取(采集)大众点评网的坐标(经纬度)信息

>>> 大众点评网最新完整数据 点击查看 <<<

<FORM style="BORDER-BOTTOM: 0px; TEXT-ALIGN: left; BORDER-LEFT: 0px; PADDING-BOTTOM: 0px; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; MARGIN: 0px; OUTLINE-STYLE: none; OUTLINE-COLOR: invert; PADDING-LEFT: 0px; OUTLINE-WIDTH: 0px; LETTER-SPACING: normal; PADDING-RIGHT: 0px; FONT: 13px/20px Tahoma, 'Microsoft YaHei', Verdana, Arial, Helvetica, sans-serif; WHITE-SPACE: normal; COLOR: rgb(51,51,51); VERTICAL-ALIGN: baseline; BORDER-TOP: 0px; BORDER-RIGHT: 0px; WORD-SPACING: 0px; PADDING-TOP: 0px; -webkit-text-stroke-width: 0px" action=http://db.site-digger.com/poi/ target=_blank>商铺URL:<INPUT style="WIDTH: 450px; FONT-FAMILY: inherit" name=url value=http://www.dianping.com/shop/550409> 

大众点评的地图位置很精确,但从HTML源码中却找不到坐标(经纬度)信息。

利用地址加载地图往往有比较大的偏差,从这一点上分析它肯定是利用的坐标(经纬度)信息。

分析JS发现原来它是把坐标(经纬度)信息进行了转换(防采集),就是HTML中的poi参数。

例如,http://www.dianping.com/shop/550409 如下图所示poi参数。

如何抓取(采集)大众点评网的坐标(经纬度)信息_第1张图片

 

在JS中可以找到解码该参数的方法如下:

view plaincopy to clipboardprint?

  1. function decode(C) {  

  2.         var digi=16;  

  3.         var add= 10;  

  4.         var plus=7;  

  5.         var cha=36;  

  6.         var I = -1;  

  7.         var H = 0;  

  8.         var B = "";  

  9.         var J = C.length;  

  10.         var G = C.charCodeAt(J - 1);  

  11.         C = C.substring(0, J - 1);  

  12.         J--;  

  13.         for (var E = 0; E < J; E++) {  

  14.             var D = parseInt(C.charAt(E), cha) - add;  

  15.             if (D >= add) {  

  16.                 D = D - plus  

  17.             }  

  18.             B += (D).toString(cha);  

  19.             if (D > H) {  

  20.                 I = E;  

  21.                 H = D  

  22.             }  

  23.         }  

  24.         var A = parseInt(B.substring(0, I), digi);  

  25.         var F = parseInt(B.substring(I + 1), digi);  

  26.         var L = (A + F - parseInt(G)) / 2;  

  27.         var K = (F - L) / 100000;  

  28.         L /= 100000;  

  29.         return {  

  30.             lat: K,  

  31.             lng: L  

  32.         }  

  33. }  

  34. document.write(decode('HHDFJGZVVIHIJG').lat+','+decode('HHDFJGZVVIHIJG').lng);<br>  

鲲鹏数据的技术人员给出该decode函数的Python实现如下:

view plaincopy to clipboardprint?

  1. # coding: utf-8  

  2. # 解析大众点评地图坐标参数(POI)  

  3. # 鲲鹏数据 http://www.site-digger.com  

  4.   

  5. def to_base36(value):  

  6.     """将10进制整数转换为36进制字符串 

  7.     """  

  8.     if not isinstance(value, int):  

  9.         raise TypeError("expected int, got %s: %r" % (value.__class__.__name__, value))  

  10.   

  11.     if value == 0:  

  12.         return "0"  

  13.   

  14.     if value < 0:  

  15.         sign = "-"  

  16.         value = -value  

  17.     else:  

  18.         sign = ""  

  19.   

  20.     result = []  

  21.   

  22.     while value:  

  23.         value, mod = divmod(value, 36)  

  24.         result.append("0123456789abcdefghijklmnopqrstuvwxyz"[mod])  

  25.   

  26.     return sign + "".join(reversed(result))  

  27.   

  28. def decode(C):  

  29.     """解析大众点评POI参数 

  30.     """  

  31.     digi = 16  

  32.     add = 10  

  33.     plus = 7  

  34.     cha = 36  

  35.     I = -1  

  36.     H = 0  

  37.     B = ''  

  38.     J = len(C)  

  39.     G = ord(C[-1])  

  40.     C = C[:-1]  

  41.     J -= 1  

  42.       

  43.     for E in range(J):  

  44.         D = int(C[E], cha) - add  

  45.         if D >= add:  

  46.             D = D - plus  

  47.         B += to_base36(D)  

  48.         if D > H:  

  49.             I = E  

  50.             H = D  

  51.   

  52.     A = int(B[:I], digi)  

  53.     F = int(B[I+1:], digi)  

  54.     L = (A + F - int(G)) / 2  

  55.     K = float(F - L) / 100000  

  56.     L = float(L) / 100000  

  57.     return {'lat': K, 'lng': L}  

  58.   

  59. if __name__ == '__main__':  

  60.     print decode('IBGITBZUHGDVEM')  

  61.    

效果演示:在本文的最开始放置了一个查询表单,输入某个商铺的URL点击查询后即可查看到该商铺的坐标(经纬度)信息。

特别说明:该文章为鲲鹏数据原创文章 ,你除了可以发表评论外,还可以转载到你的网站或博客,但是请保留源地址,谢谢!!(尊重他人劳动,你我共同努力)


http://www.site-digger.com/  
西安鲲之鹏网络信息技术有限公司 - 国内最专业Web数据采集服务提供商  
选择我们,所有数据都是你的!  
电话:13389148466(周先生)或   13571845363(齐先生)
QQ:1649677458 或 312602670
Email:[email protected]

你可能感兴趣的:(如何抓取(采集)大众点评网的坐标(经纬度)信息)