<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python玩轉(zhuǎn)高德地圖API(二)

          共 3595字,需瀏覽 8分鐘

           ·

          2019-09-23 23:21

          咪哥雜談

          ea327c3dade2e6315fdd610efbb97ec9.webp

          閱讀時間約 4 分鐘。閱讀可忽略代碼,代碼提供給想練手的人。


          1

          前言


          上篇文章中,簡單的介紹了下高德地圖的 API 相關(guān)業(yè)務(wù)知識,不知道大家有沒有看懂咧!
          這篇文章來繼續(xù)完成上篇文章沒有完成的編碼任務(wù)!忘記的,可以簡單回顧一下《Python玩轉(zhuǎn)高德地圖API(一)


          2

          環(huán)境介紹


          開始前,先來說下本機(jī)環(huán)境。
          • Python版本? :? Python3.7
          • 開發(fā)工具? ? ? :? ?Pycharm
          • 第三方庫? ??? : ? requests

          還會用到的是 Python 自帶的 json 庫。因為調(diào)用 API 返回的結(jié)果是 JSON 或者 XML 形式的報文,關(guān)于這兩點(diǎn),可以回看《python小課堂25 - 你真的了解JSON嘛?

          本項目必然是采用 JSON 啦,現(xiàn)在除了一些傳統(tǒng)公司(比如我之前在的保險公司,以及一些國企航空公司)的老項目使用 XML 報文來進(jìn)行數(shù)據(jù)傳輸,大部分互聯(lián)網(wǎng)項目中采用的都是 JSON 傳遞接口信息。


          3

          requests 玩轉(zhuǎn) API


          requests?是一個優(yōu)雅的男孩子,不對,是一個優(yōu)雅的第三方庫~
          555a70ddca3d307cb8836a2f1f0d3bde.webp
          在之前的爬蟲文章中,有介紹的此庫的使用。作者個愛玩攝影的大神,寫代碼就像玩攝影一樣,純屬藝術(shù)創(chuàng)作。
          以上次介紹高德 API 中的 POI 接口來舉例。

          1.?打開官網(wǎng),搜索 POI?處
          6f50b4938ce46b36c9f6f5640426d596.webp
          2.?閱讀官網(wǎng) API 文檔,查看各參數(shù)含義
          9c99e369a0f93476cae76ceaac09dc02.webp


          3. 運(yùn)行看結(jié)果
          e447cf877cbb7001f4ac81c30687bd86.webp


          看懂文檔,理解了官方示例后,其實操作起來很簡單,只需要我們用 requests 庫攜帶自己的 key 向高德發(fā)起請求即可。

          當(dāng)我們想獲取北京市"麥當(dāng)勞"全部餐飲地址時,請求的地址:

          https://restapi.amap.com/v3/place/text?keywords=麥當(dāng)勞&city=北京&offset=20&page=1&key={key}&extensions=base
          url中,?后面跟的就是請求時的參數(shù)。

          • keywords :要搜索的關(guān)鍵詞
          • city :城市,可以查看具體的城市碼表(官方提供)
          • offset :每頁顯示多少條數(shù)據(jù)
          • page :頁數(shù)
          • key :之前申請的用戶 key
          • extensions :?傳入 base 即可,all 的話比較多余


          還有些可選項,不傳就行啦,比如 output=xml ,默認(rèn)不傳就是 json 形式返回結(jié)果。

          4

          硬核代碼


          代碼其實不多,算上空行一共 70 行不到,就可以獲取完整地理信息。
          如果想要實驗的同學(xué),可以按照順序?qū)⒋a copy 到自己的編輯器實踐。下面按照順序介紹:
          1. 讀取用戶 key 函數(shù)
          目的是讀取本地 key ,靈活化處理(這樣不用暴露自己的 key 給大家看了?3168c47f83fe139ab94e2e903217b662.webp) user-key中寫入你自己的key。
          8ae1bfad6aa8f061541b672718930d84.webp
          def read_key():    """  持久化key,便于讀取 """    key_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'user-key')    print(key_path)    with open(key_path, 'r', encoding='utf-8') as f:        key = f.read()        print(key)    return key

          2. requests?請求,get 方式通用函數(shù)
          沒什么好介紹的,之前說過很多遍了,使用方法按照去看 requests 庫的官方文檔即可。
          def request_url_get(url):    """ 請求url方法get方法 """    try:        r = requests.get(url=url, timeout=30)        if r.status_code == 200:            return r.text        return None    except RequestException:        print('請求url返回錯誤異常')        return None

          3. 調(diào)用高德 api 抽象方法,解析返回的 json 函數(shù)
          使用了 python 自帶的 json 庫,將高德 api 返回的字符串轉(zhuǎn)為了 json 形式,但是在 python 中,其實是 dict 類型的,獲取結(jié)果可以通過類似 result['address'] 的形式獲取想要的內(nèi)容。
          def parse_json(content_json):    """  解析json函數(shù) """    result_json = json.loads(content_json)    return result_json
          def request_api(url): """ 請求高德api 解析json """ result = request_url_get(url) result_json = parse_json(result) return result_json

          4. 調(diào)用高德?api 抽象方法,解析返回的 json 函數(shù)


          def run():    """ 運(yùn)行函數(shù) """    keywords = '麥當(dāng)勞'    city = 'beijing'    key = read_key()    offset = 20
          index_url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \ f'offset={offset}&page=1&key={key}&extensions=base' index_result = request_api(index_url) pages = math.ceil(int(index_result['count']) / offset) # 算出一共需要的總頁數(shù)
          for page in range(1, pages + 1): url = f'https://restapi.amap.com/v3/place/text?keywords={keywords}&city={city}&' \ f'offset={offset}&page={page}&key={key}&extensions=base' result = request_api(url) print(result)

          最后這個函數(shù),好好說下,精華思路都在這塊。
          為了代碼的靈活度,我們可以將請求的中的變化參數(shù)抽出來,作為程序中的變量去構(gòu)造請求。

          請求第一次時,高德地圖會返回一個 count 字段,代表總數(shù)量,使用 count / offset ,就能得到一共我們要循環(huán)訪問多少頁。代碼中做了向上轉(zhuǎn)型的處理。
          例如下面:


          4c51d73c1181fb6acf5e8b19c5517551.webp
          查詢北京麥當(dāng)勞一共 262 個數(shù)據(jù),每頁只顯示 20 條數(shù)據(jù)(offset的值),所以 262/20 = 13.1 。
          這樣需要讓傳入 url 中的 page 從 1 - 14 頁去循環(huán)獲取數(shù)據(jù)。所以在代碼中,使用了 math.ceil 的方法讓 13.1 變成 14。
          看下最終獲取完數(shù)據(jù)的截圖:

          88731b5063eb10d3e129dfe58a1430c6.webp
          Pycharm后面還有很多很多數(shù)據(jù)。。

          5

          總結(jié)


          嗯!到這里,交通數(shù)據(jù)分析項目相關(guān)的內(nèi)容就結(jié)束了,接下來就是自己開發(fā)了...大家感興趣的也可以自行嘗試。
          是不是感覺調(diào)用 API 這種東西,就是這么簡單枯燥而無趣呢。。。可往往各種商業(yè)公司的背后,賺錢的邏輯就是靠這些接口丫!

          13bd4e2744aff41583112d9f8c5c1fa2.webp


          大概一年前的時候,我自己簡單的開發(fā)出來了第一個版本,當(dāng)時沒有想著用 flask 等框架,后續(xù)我會在此項目技術(shù)上,繼續(xù)集成開發(fā)吧。
          當(dāng)時放棄的原因是.....上家公司的路段高德地圖不支持....
          到現(xiàn)在,此項目 star14,fork5。。。

          fc3c65e13d3c2e3f75d510f505774029.webp


          感興趣的后臺回復(fù)?高德 獲取源碼地址。
          說下后期本號的安排,系統(tǒng)性的,表面知識介紹的也差不多了,可能偶爾會隨性的寫些自己的感想,亦或是 Python 小爬蟲方面的東西。
          不過接下來的核心路線,是使用 Python 來完成一些數(shù)據(jù)結(jié)構(gòu)以及算法的知識。比如數(shù)組、鏈表、樹,亦或是各種排序算法、有用的算法之類的。。。
          畢竟程序員的靈魂核心,還是這些本質(zhì)上的東西!一味地追新是很累的...Python實現(xiàn)算法的話,語法上有著天然優(yōu)勢,簡潔優(yōu)雅,而不失內(nèi)涵!

          本篇文章就到這里啦,有什么想要說的,歡迎留言區(qū)留言探討!a35808bd2088fc87fbd492f3722585b6.webpa35808bd2088fc87fbd492f3722585b6.webp


          ▼往期精彩回顧▼Python玩轉(zhuǎn)高德地圖API(一)
          Python入門自學(xué)的一些技巧和心得咪哥的思維認(rèn)知日記(三) - 賺錢思維



          d0259420cf765270b79a9b8d5abee687.webp你點(diǎn)的每個在看,我都認(rèn)真當(dāng)成了喜歡
          瀏覽 74
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码二区三区 | 大香蕉伊人在线综合 | 美女极度色诱图片www视频 | www.日B| 成人第一页|