close
從網路上抓取資料,再存放到公司資料庫 是 MIS 工程師常見的工作。首先要找到資訊的網站,經過整理找出資料型態。接下來要到資料庫裡建立新的表格(Table),設定資料欄位和資料型態,最後再把資料一筆一筆地放進資料庫。這樣重複性高的工作其實不少,也耗費了許多人工時間。
寫程式的好處就是可利用電腦的高速運算來縮短人工時間,提高工作效率。這裡我寫了一個程式,將抓取網路資料、建立新的表格(Table)、設定資料欄位和資料型態、資料存進資料庫都由程式完成。
[讀取網路資料]
在網路上的資料都有 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 格式的資料
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 格式的資料
用程式來執行,效率也高:
[開啟資料庫]
相對於 SQLite,mySQL 比較複雜一些,而且耗費時間也增加了!
conn = pymysql.connect('localhost', port=3306, user='xxxx',
passwd='yyyy', charset='utf8', db='zzzz')
cur = conn.cursor()
conn = pymysql.connect('localhost', port=3306, user='xxxx',
passwd='yyyy', charset='utf8', db='zzzz')
cur = conn.cursor()
[建立新的資料表(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)
就完成了!
最主要的原因是 這兩個操作需要透過 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)
就完成了!
在 mySQL phpAdmin 網頁中也可看到新增的表格和欄位
[資料加入資料庫]
這裡遇到的問題和上面一樣,都是 SQL DML 的問題,解決的方法也差不多;但這裡有一點相容性的問題:
SQLite 用 str="insert into '{}' (...)"
mySQL 用 str="insert into {} (...)"
SQLite 用 str="insert into '{}' (...)"
mySQL 用 str="insert into {} (...)"
[結論]
這次的我們將抓取網路資料、建立新的表格(Table)、設定資料欄位和資料型態、資料存進資料庫寫成單一程式,由電腦程式自動執行。由讀取到資料存好1到2分鐘內全部完成。跟人工操作比起來,的確提高生產效率。
文章標籤
全站熱搜
留言列表