• 数据分析之维度标准化


      • 1、python爬虫requests的简单实现
      • 2、访问高德地图API,返回查询信息
        • 曲折实现的原因
          • 经过本人对官方文档的demo进行调试,有些地址直接地理编码,返回的结果没有行政区域
          • 所以曲线救国,采用了先获取该地址的经纬度,再获取该地址的行政区域和编码
        • 实现步骤
          • (1)输入地址,返回经纬度
          • (2)输入经纬度,返回行政区域和行政编码
          • (3)python连接数据库
          • (4)python读取数据库中的数据
          • (5)python开始循环查询行政区域和行政编码,查不到经纬度的跳过
          • (6)python将查询到的信息插入相应的数据库
      • 3、代码
        •   访问接口
          •  1 import requests
             2 import json
             3 
             4 
             5 #传入地址,返回对应的经纬度信息
             6 def getLocation(address,key):
             7     
             8     
             9     url = 'https://restapi.amap.com/v3/geocode/geo?key=%s&address=%s'%(key,address)
            10     res = requests.get(url)
            11     try:
            12         # 将 JSON 对象转换为 Python 字典
            13         json_data = json.loads(res.text)
            14         #取字典里的localtion的值,将键放到方括号里
            15         location=json_data['geocodes'][0]['location']
            16     except:
            17         location=''
            18         #print("没有location")
            19     return location
            20 
            21 #传入经纬度,返回
            22 def getADaddress(location,key):
            23     longitude=location.split(',')[0]
            24     latitude=location.split(',')[1]
            25     #url = 'https://restapi.amap.com/v3/geocode/regeo?key=%s&location=%s'%(key,location)
            26     url ='https://www.amap.com/service/regeo?longitude=%s&latitude=%s'%(longitude,latitude)
            27     res = requests.get(url)
            28     # 将 JSON 对象转换为 Python 字典
            29     json_data = json.loads(res.text)
            30     #取字典里的ADaddress的值,将键放到方括号里
            31     """province=json_data['regeocode']['addressComponent']['province']
            32     city=json_data['regeocode']['addressComponent']['city']
            33     district=json_data['regeocode']['addressComponent']['district']
            34     adcode=json_data['regeocode']['addressComponent']['adcode']
            35     ADaddress=[province,city,district]
            36     data=[adcode,ADaddress]"""
            37     ADaddress=json_data['data']['desc'].split(',')[0]+json_data['data']['desc'].split(',')[1]+json_data['data']['desc'].split(',')[2]
            38     adcode=json_data['data']['districtadcode']
            39     data=(adcode,ADaddress)
            40     return data
            41     
            42 
            43 def getData(key,address):
            44     location=getLocation(address,key)
            45     try:
            46         data=getADaddress(location,key)
            47     except:
            48         data=('','')
            49         #print("location传入失败")
            50     return data
          • 数据库操作
            •   
               1 import mysql.connector
               2 
               3 
               4 def conn():
               5     mydb = mysql.connector.connect(
               6       host="localhost",
               7       user="xxxx",
               8       passwd="xxxx",
               9       database="xxxxx"
              10     )
              11     return mydb
              12 
              13 def getData(mydb):
              14     mycursor = mydb.cursor()
              15      
              16     mycursor.execute("SELECT xx, xxxx FROM xxxxx ")
              17     
              18     myresult = mycursor.fetchall()
              19      
              20     return myresult
              21 
              22 def update(mydb,val):
              23     mycursor = mydb.cursor()
              24      
              25     sql = "UPDATE xxxxx SET xxxxxx = %s ,xx= %s WHERE xx = %s"
              26      
              27     mycursor.execute(sql, val)
              28      
              29     mydb.commit()
              30      
              31 
              32     
            • Client
              •   
                 1 import MapStudy
                 2 import MySql
                 3 
                 4 if __name__ == '__main__':
                 5     key='e1f2ea153a4d6c972194944737a5bd0d'
                 6     list1=MySql.getData(MySql.conn())
                 7     for i in range(len(list1)):  
                 8         address=list1[i][1].split()[0]
                 9         #print(address)
                10         #print(type(address))
                11         datasimple=MapStudy.getData(key,address)
                12         #元组相加还是元组
                13         list1[i]=list1[i]+datasimple
                14         print(list1[i])
                15         val=(list1[i][2],list1[i][3],list1[i][0])
                16         MySql.update(MySql.conn(),val)
                17     
                18     
      • 4、教训:
        • (1)在做中学,针对实例,先跑通,会使用,之后再来理解其中的每一部分的含义和内容
        • (2)官方文档不一定适合小白,前人经验或许更有用
        •   (3)根据经纬度返回行政区划和行政区划编码,使用官方提供的接口,当值为空时,会返回list,对于我们数据的处理,增加了判断的复杂性
      •  5、总耗时
        •   2020年3月12日6.5h
        •   2020年3月13日3h52m7s
  • 相关阅读:
    WCF 订单服务(2)
    移动应用接口的授权和安全
    数据库服务器死锁的解决方法 (转)
    WCF 订单服务(3)
    sqlservice 表分区方法
    基于.NET解决方案的架构和框架
    IIS7架构原理
    多线程的同步和通信
    【原创】关于wince OS开发面试问题的总结系列之OAL
    【原创】关于noot的学习笔记
  • 原文地址:https://www.cnblogs.com/quxiangjia/p/12484096.html
Copyright © 2020-2023  润新知