現在有許多網站,為了共享擁有的資料或服務,都會透過建立API(Application Programming Interface)的方式,給外部的使用者進行更多元的應用,對於網站來說,除了能夠方便授權外,也可以彈性管理所提供的資料內容。
這時候,如果想要利用Pandas套件強大的資料分析功能,處理網站API所回傳的JSON格式資料內容,該怎麼實作呢?本文就以痞客邦(PIXNET)網站的Open Data API為例,來和大家分享Pandas套件如何讀取回傳的熱門美味食記文章資料,重點包含:
- 請求PIXNET Open Data API
- Pandas套件讀取API回傳的資料
- Pandas套件篩選所需的分析欄位
一、請求PIXNET Open Data API
痞客邦(PIXNET)為一個部落格類型的網站,其中包含了許多知名部落客所撰寫的經典文章,像是美食、旅遊、親子及美妝等,除此之外,也提供了Open Data API分享其中的網站資料。
首先,前往PIXNET API Developers,如下圖:
點擊最上方的「Open Data」頁籤,往下可以看到所提供的資料分類,如下圖:
本文選擇使用「文章分類」,點擊後可以看到如下圖的說明文件:
其中API的URL網址結構中,由於本文以「熱門美味食記」文章為例,所以後面的參數分別為hot(熱門文章)與26(category_id),如果想要更換其它的文章類別,往下有對應的category_id可以參考,截取部分如下圖:
瞭解了PIXNET Open Data API的網址結構後,就可以利用以下指令來安裝本文所會使用到的Requests與Pandas套件:
$ pip install requests $ pip install pandas
安裝完成後,本文使用Visual Studio Code開發工具,建立app.py檔案,並且引用requests與pandas模組(Module),如下範例:
import requests import pandas as pd
接下來,就可以透過requests模組(Module),來發送請求到PIXNET Open Data API,以及呼叫json()方法(Method)取得回應的JSON編碼內容,如下範例:
import requests import pandas as pd response = requests.get('https://emma.pixnet.cc/mainpage/blog/categories/hot/26') data = response.json() print(data)
執行結果就會像是PIXNET Open Data API文件中所提供的以下結構:
{ articles: [ { id: "280956244", public_at: "1430379640", site_category: "散文筆記", site_category_id: "14", category: "未分類", category_id: "0", link: "http://pwph8ne04t.pixnet.net/blog/post/280956244", status: "2", is_top: "0", is_nl2br: "0", comment_perm: "1", comment_hidden: "0", title: "民間二胎 民間二胎金主風險 能源局 陽光宅急便到府", thumb: "https://imageproxy.pimg.tw/zoomcrop?url=http%3A%2F%2Fbossbank.com.tw%2Fwp-content%2Fuploads%2F2%25E8%2583%258E2.jpg&width=90&height=90", cover: "", hits: { total: 0, daily: 0 }, info: { trackbacks_count: 0, comments_count: 0, shareds_count: 0, hit: 0 }, hit_uri: "//counter.pixplug.in/count.php?timestamp=1430379897&random=1657534242&check=384168003&no_timeout=2&data[blogarticle]=%7B%22blogid%22%3A%225139028%22%2C%22articleid%22%3A%22280956244%22%2C%22no_timeout%22%3A2%7D", sns: { twitter: null, facebook: null, plurk: null }, tags: [ { tag: "2胎房貸 2胎房貸試算", locked: 0, added_by: "pwph8ne04t" }, { tag: "銀行二胎 銀行二胎借款", locked: 0, added_by: "pwph8ne04t" }, { tag: "房屋二胎 銀行房屋二胎利息", locked: 0, added_by: "pwph8ne04t" }, { tag: "民間二胎 民間二胎金主風險", locked: 0, added_by: "pwph8ne04t" }, { tag: "房屋二胎免費估貸", locked: 0, added_by: "pwph8ne04t" } ], user: { name: "pwph8ne04t", display_name: "pwph8ne04t", avatar: "https://s8.pimg.tw/avatar/pwph8ne04t/0/0/resize/90x0.png?v=1403427570", cavatar: "https://s8.pimg.tw/avatar/pwph8ne04t/0/0/zoomcrop/90x90.png?v=1403427570", link: "http://pwph8ne04t.pixnet.net", is_vip: false, has_ad: true } }, ... ] }
二、Pandas套件讀取API回傳的資料
從PIXNET Open Data API的回傳結果,可以看到是一個巢狀式的JSON結構,而想要利用Pandas套件來讀取其中的資料,使用json_normalize()方法(Method),傳入JSON格式資料與要讀取的欄位名稱即可,如下範例:
import requests import pandas as pd response = requests.get('https://emma.pixnet.cc/mainpage/blog/categories/hot/26') data = response.json() df = pd.json_normalize(data, 'articles') print(df)
截取部分執行結果
由於欄位非常的多,Pandas套件會將一些執行結果的欄位截掉,這時候想要檢視所有的欄位名稱,就可以呼叫Pandas DataFrame的columns屬性,如下範例:
import requests import pandas as pd response = requests.get('https://emma.pixnet.cc/mainpage/blog/categories/hot/26') data = response.json() df = pd.json_normalize(data, 'articles') print(df.columns)
執行結果
三、Pandas套件篩選所需的分析欄位
知道了所有的欄位名稱後,就可以另外建立一個Pandas DataFrame,來依分析需求選擇所需的欄位,如下範例:
import requests import pandas as pd response = requests.get('https://emma.pixnet.cc/mainpage/blog/categories/hot/26') data = response.json() df = pd.json_normalize(data, 'articles') new_df = df[['category', 'title', 'user.name','info.hit','info.shareds_count']] print(new_df)
執行結果
四、小結
想要進行資料分析,除了網頁爬蟲、檔案與資料庫外,網站所提供的API也是一個非常重要的資料獲取來源,學會Pandas套件讀取API回傳的JSON格式資料後,就能夠利用Pandas套件的方法(Method),將讀取到的資料進行後續的清理、格式化、排序、篩選與視覺化等,提升資料分析的效率。
最後,大家也來選擇一個自己喜歡的網站API,應用本文所學的技巧,利用Pandas套件來分析其中的資料內容吧~
如果喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
- [Pandas教學]快速掌握Pandas套件讀寫SQLite資料庫的重要方法
- [Pandas教學]輕鬆入門3個常見的Pandas套件排序資料方式
- [Pandas教學]有效利用Pandas套件篩選資料的應用技巧
- [Pandas教學]善用Pandas套件的Groupby與Aggregate方法提升資料解讀效率
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(下)
- Visual Studio Code漂亮印出Pandas DataFrame資料的實用方法
- [Pandas教學]資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
- [Pandas教學]5個實用的Pandas讀取Excel檔案資料技巧
- 解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率
- [Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧
- [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法
- [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法
留言
張貼留言