ETH官方钱包

前往
大廳
主題

【手把手帶你學會爬蟲】#3 別著急!先來找 API!

魔化鬼鬼 | 2021-11-17 21:29:44 | 巴幣 1206 | 人氣 6410

前言


        在第一篇有提到,爬蟲是指可以在網路上抓取資料的程式,不過有些時候網頁製作者已經給你整理好的資料了,專門提供給別人用的,如果再自己慢慢觀察 html 的規律,慢慢翻開發者工具的網頁請求,可能會多浪費一些時間。

什麼是 API


        API 全名 Application programming interface,繁體中文區域的人貌似是說「應用程式介面」,坦白來說我覺得對岸翻的「應用程式接口」比較好。API 簡單來說就是人家包好的資料接口,你不需要知道背後怎麼運作的,你只要知道要餵給他什麼資料,他會吐回什麼資料給你就好

        我們先看看網頁開發那塊是怎麼用 API 的,首先網頁開發有分為前端和後端,前端就是負責我們在開發人員工具可以看到的 HTML、Javascript、CSS,後端就是負責背後資料的處理邏輯和資料庫的更新等操作。而通常 API 就是後端工程師規劃的,接著前端工程師再往 API 送請求,取得他們想要的資料。如果你看不懂我說的,下面 3 分鐘的影片很好的說明 API 是什麼。


        其實 API 也不是只有給前端工程師用而已,包括後端工程師也會互相 call API,甚至手機 APP 工程師也會 call API。API 這個詞其實非常的廣義,就連我在上計算機網路課程時,socket 的運作方式也能被稱為一個 API。而我覺得能夠把他簡單帶過的解釋方式就是:

▍「一個 API 可以理解為一個窗口或接口,在窗口的外部使用者不需要理解內部的運作模式,只要能夠把資料餵進去,並且得到預期的資料就可以。」

我也要 call API


        既然後端工程師提供的 API 是公開的,那麼我們也能模仿前端工程師來向 API 發送請求。在此之前你大概需要知道在網路世界中傳遞資料的協議是 http,並且在 http 中向目標送請求這個動作叫做 request,對方也會回應一個 response,而 request 又大概有分 get 和 post 這兩種最常見的,這些我後面一篇會再提。

        這邊我就示範 get 這個操作來 call API。首先我使用的範例是我自己隨便架的 「google-10-news-rest-api」,大概功能就是你給他關鍵字,他就會回傳 google news 上面的 10 筆搜尋結果。以下是 API 的 url,{keyword} 就是放入你想搜尋的東西,注意在呼叫時不用加大括號。

https://google-10news-rest-api.herokuapp.com/ten_news/{keyword}

        其實一般來說這邊你如果找到 API ,架 API 的人都會寫一份很完整的文檔 (documentation),你需要自己去看懂如何照他的格式來呼叫 API,但是這邊因為我的 API 只有一個功能所以我就寫得很隨便。

        你可以試試看直接在瀏覽器的網址列丟看看「https://google-10news-rest-api.herokuapp.com/ten_news/颱風」,如果我的 API 沒掛的話你的畫面應該會出現一堆亂七八糟的東西。


        那是因為我那時候架 API 時中文編碼不知道為什麼輸出成 unicode,所以這一串東西要拿去轉成 utf-8 格式才會是我們要的東西。Unicode 轉 UTF-8 網路工具



        登登!這樣就取得你要的資料了。不過其實開發人員工具會幫你轉碼,不用整個貼過去別的地方再轉碼,具體方式就是打開你的 f12,最上面那排找一個叫做「Network」中文應該叫「網路」的,如果沒找到可以點旁邊的 「+」來新增。


        新增之後在上面那排按下「Network」或「網路」,再按下 F5 重整,你會看到多了一些東西,那些就是網頁背後的 request 和 response,選那個名字最長的,右邊再選擇 Preview 中文應該叫預覽,就可以看到結果了。



        用這個的好處是你可以很明確的看到資料的樹狀結構,以及可以自由地拉伸介面,讓你看得比較舒適。到這邊知道一點網路請求的人其實可以開始用程式碼動手做做看了,程式碼的部分我會等之後 requests 或 beautifulsoup 簡單提過後再示範一次。

總結


        API 是一個很讚的東西,很多地方都會提供公開資料,大部分公開資料都可以靠 API 來取得,這篇我只有介紹最簡單的 get 方式,實際在寫的時候可能還會有很多不懂的地方,所以下一篇我打算來簡單說明一下 Http,一個在網路世界中最常看到的傳輸協定,順便複習我在計算機網路學到的東西。

創作回應

相關創作

更多創作