close

7_TableShow.png

      從網路上抓取資料,再存放到公司資料庫 是 MIS 工程師常見的工作。首先要找到資訊的網站,經過整理找出資料型態。接下來要到資料庫裡建立新的表格(Table),設定資料欄位和資料型態,最後再把資料一筆一筆地放進資料庫。這樣重複性高的工作其實不少,也耗費了許多人工時間。


      寫程式的好處就是可利用電腦的高速運算來縮短人工時間,提高工作效率。這裡我寫了一個程式,將抓取網路資料、建立新的表格(Table)、設定資料欄位和資料型態、資料存進資料庫都由程式完成。
 

1_fields.png

[讀取網路資料]

在網路上的資料都有 http:// 或 https:// s:// ,例如台灣政府資訊公開站裡有關細懸浮微粒子 PM 2.5 的內容就放在opendata.epa.gov.tw/webapi/Data/ATM00625/?$skip=0&$top=1000&format=json。那在 Python 語言中我們可以用以下的程式讀到這筆 JSON 格式的資料:

from json import loads
import urllib.request

with urllib.request.urlopen("opendata.epa.gov.tw/webapi/Data/ATM00625/?$skip=0&$top=1000&format=json") as url:
data = json.loads(url.read().decode())

Python 語言中可以用 Dictionary 來讀取 JSON 格式的資料
 
用程式來執行,效率也高:

1_onWeb.png

[開啟資料庫]

相對於 SQLite,mySQL 比較複雜一些,而且耗費時間也增加了!
conn = pymysql.connect('localhost', port=3306, user='xxxx',
passwd='yyyy', charset='utf8', db='zzzz')

cur = conn.cursor()

2_openDB.png

[建立新的資料表(Table)]

這次實作花了很多時間在建立資料表和插入資料上。
最主要的原因是 這兩個操作需要透過 SQL 語句來完成而不是一般的 Python 語言。好在 Python 語言支援字串的操作,讓我可以克服這些問題。

一般的 SQL 語句建立表格的方式是:
"CREATE TABLE IF NOT EXISTS newtable (
);"

現在如果這裡的 newtable 要讓使用者輸入,要如何完成?
我使用 Python 語言中 字串位置的功能,將這個使用者輸入的變數放進來:

str="CREATE TABLE IF NOT EXISTS {:s} (
);".format(tablename)

再結合 執行 SQL DML 命令:
cur.execute(str)
就完成了!

3_OpenTableFine.png

在 mySQL phpAdmin 網頁中也可看到新增的表格和欄位

Browser_Fields_types.png

[資料加入資料庫]

這裡遇到的問題和上面一樣,都是 SQL DML 的問題,解決的方法也差不多;但這裡有一點相容性的問題:
SQLite 用 str="insert into '{}' (...)"
mySQL 用 str="insert into {} (...)"
 
7_TableShow.png
 

[結論]

這次的我們將抓取網路資料、建立新的表格(Table)、設定資料欄位和資料型態、資料存進資料庫寫成單一程式,由電腦程式自動執行。由讀取到資料存好1到2分鐘內全部完成。跟人工操作比起來,的確提高生產效率。
arrow
arrow
    文章標籤
    Python mySQL SQL DML
    全站熱搜
    創作者介紹
    創作者 小木屋 的頭像
    小木屋

    小木屋

    小木屋 發表在 痞客邦 留言(0) 人氣()