[GMT] 自動從中研院 BATS CMT Catalog Search 下載地震資料

我們會希望很方便的利用一條命令列就將所有的地震資料下載下來並處理,以下利用 curl 與 Python3 下載中研院 BATS CMT Catalog Search 網頁的資料。

原理:

中研院 BATS (Broadband Array in Taiwan for Seismology)是臺灣地震觀測的重要資料來源。一般而言,當我們想匯出 GMT (psmeca)可接受的格式時,需要到檢索網頁(http://tecws.earth.sinica.edu.tw/BATS/cmtbyform.php)將表單填寫完成後,再送出給後端的伺服器去做查詢並傳回資料。

這份表格是用 HTTP 的 POST request 去完成的(參考 >這邊< 說明語法),因此,接下來我們將用 curl 提供的 -F 選項,將表格中所需的參數一一填入並傳送給伺服器。

BATS stations (2016)
BATS stations (2016)

流程:

填表單( curl -F)-( POST ) -> ./cmtsearch_result.php 處理 -> 傳回結果(/cmtsearch_result.php) -> Python re 讀取並找出 .dat 檔連結 -> Python requests 模組下載。

變數一覽:

瞭解了所有需要的內容後,我們就可以將所有的變數與對應的回應傳回給伺服器(http://tecws.earth.sinica.edu.tw/BATS/cmtsearch_result.php):

下載檔案(.dat)

當我們向伺服器要求完成後,伺服器會傳回一個結果呈現的網頁(./cmtsearch_result.php),一般來說,我們要點「Download GMT format file」才可以下載,但是看原始的網頁碼,可以發現一個包含結果的連結:

上面的 window.open(“./userdata//cmt/1485833677/gmt_meca.dat“) 就是我們要的資料網址。

在這邊,我用 Python 3 的 re 模組來比出這一段字串,並補完完整網址後用 requests 模組完成下載。(註:這邊假設下載完的網頁檔名為「cmtsearch_result.html」)

之後再研究是否可以完全由 Python 完成工作~

示範輸出

 


請多多指教!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料