跳到主要內容

Python網路爬蟲應用實例:臺北市不動產實價周報開放資料爬取指南

real_estate_opendata_web_crawler

在眾多的資料分析專案中,不動產實價也是很常被拿來分析的主題,那想要利用Python網頁爬蟲蒐不動產的資料,除了可以爬取網站上的資料之外,地方政府也有透過OpenAPI來提供各種不同的開放資料(OpenData),讓大家進行多元的分析或應用。這篇文章就來和大家分享,如何利用Python網頁爬蟲爬取臺北市資料大平臺上的不動產實價開放資料

  • 開放資料(OpenData)存取方法
  • Python網頁爬蟲存取開放資料(OpenData)
  • Python網頁爬蟲爬取開放資料(OpenData)

一、開放資料(OpenData)存取方法

前往臺北市資料大平台,如下圖:

real_estate_opendata_web_crawler

在搜尋的地方輸入「臺北市實價周報」,就可以找到臺北市不動產實價周報的開放資料(OpenData),如下圖:

real_estate_opendata_web_crawler
點擊之後,可以看到它的資料描述、欄位說明等,那存取方式就在最下面的地方,分別提供下載CSV檔案資料、API、預覽資料集,而想要利用Python網頁爬蟲爬取不動產的實價資料,就要選擇API的方式,如下圖:

real_estate_opendata_web_crawler
在API的文件中,Python網頁爬蟲會需要利用API位址、API使用方式與參數來發送請求,進而爬取回應的不動產實價資料。另外,「API參數及測試」則是依需求選擇性加入的參數,如下圖:
real_estate_opendata_web_crawler

二、Python網頁爬蟲存取開放資料(OpenData)

瞭解臺北市不動產實價周報的開放資料API使用方式之後,就可以開啟Python網頁爬蟲專案,引用requests模組,如下範例:

import requests

接下來,Python網頁爬蟲發送請求到臺北市不動產實價周報的開放資料API,並且傳入必要的參數,如下範例:

import requests


# 參數
params = {
    "resource_id": "2979c431-7a32-4067-9af2-e716cd825c4b"
}

# 發送請求
response = requests.get(
    'https://data.taipei/api/v1/dataset/2979c431-7a32-4067-9af2-e716cd825c4b?scope=resourceAquire',
    params=params
)

假設我們只想要利用Python網頁爬蟲爬取10筆的臺北市不動產實價資料,那就要增加傳入limit選擇性參數,如下範例第7行:

import requests


# 參數
params = {
    "resource_id": "2979c431-7a32-4067-9af2-e716cd825c4b",
    "limit": 10
}

# 發送請求
response = requests.get(
    'https://data.taipei/api/v1/dataset/2979c431-7a32-4067-9af2-e716cd825c4b?scope=resourceAquire',
    params=params
)

這時候我們將Python網頁爬蟲取得的回應結果(response)印出來,如下範例:

import requests


# 參數
params = {
    "resource_id": "2979c431-7a32-4067-9af2-e716cd825c4b",
    "limit": 10
}

# 發送請求
response = requests.get(
    'https://data.taipei/api/v1/dataset/2979c431-7a32-4067-9af2-e716cd825c4b?scope=resourceAquire',
    params=params
)

# 印出回應的資料
print(response.text)

可以看到如下圖截取的JSON格式結構:

real_estate_opendata_web_crawler

Python網頁爬蟲成功取得回應的臺北市不動產實價資料,接下來就可以爬取所需要的欄位資料。

三、Python網頁爬蟲爬取開放資料(OpenData)

首先,Python網頁爬蟲呼叫Python內建的json()函式,解析回應的臺北市不動產實價資料,並且存取results資料欄位,如下範例第17行:

import requests


# 參數
params = {
    "resource_id": "2979c431-7a32-4067-9af2-e716cd825c4b",
    "limit": 10
}

# 發送請求
response = requests.get(
    'https://data.taipei/api/v1/dataset/2979c431-7a32-4067-9af2-e716cd825c4b?scope=resourceAquire',
    params=params
)

# 解析回應的資料、存取資料欄位
data = response.json()['result']['results']

假設我們想要爬取其中的district(行政區)、location(土地區段位置)、landa(土地移轉總面積(坪))與tprice(交易總價(萬元))等四個欄位,就可以利用For迴圈讀取回應的臺北市不動產實價資料集,並且爬取所需的四個欄位,如下範例:

import requests


# 參數
params = {
    "resource_id": "2979c431-7a32-4067-9af2-e716cd825c4b",
    "limit": 10
}

# 發送請求
response = requests.get(
    'https://data.taipei/api/v1/dataset/2979c431-7a32-4067-9af2-e716cd825c4b?scope=resourceAquire',
    params=params
)

# 解析回應的資料、存取資料欄位
data = response.json()['result']['results']

# 爬取所需的欄位資料
for d in data:

    print(d['district'], d['location'],
          d['landa'] + '坪', d['tprice'] + '萬元')

執行結果

real_estate_opendata_web_crawler

四、小結

這篇文章示範了Python網頁爬蟲透過OpenAPI爬取開放資料(OpenData)的方法,主要的步驟就是先瞭解OpenAPI的使用方式,接下來利用Python網頁爬蟲發送請求進行存取,並且解析回應的開放資料(OpenData),最後即可爬取所要分析的欄位資料了。除此之外,本文使用了臺北市實價周報開放資料為例,讓大家學會爬取不動產的實價資料,以進行房地產價格的分析。

你可能有興趣的文章










留言