2016年9月21日 星期三

國際觀大補帖

最近某位教授覺得大家竟然不知道希特勒是誰,覺得大家都沒國際觀,台灣未來一定超沒競爭力,大家都只能領22K。
他還提供了一個網站<國際觀檢測網>:「每次點進去都會出現10道題目,例如尼克森、翁山蘇姬是哪國人、做過什麼事,並提供詳解」,連結在此:
http://doc.boyo.org.tw/gp/

老實說我覺得這樣太沒效率了,一次只有10題不小心還會重複,豈不是浪費應考人的時間!?因此我就做了一份增進國際觀大補帖,把網站的題庫全部拉出來,讓大家題目可以一看再看,準備完了再上線考試,就像考駕照一樣。
相信有了這份大補帖,一定能幫大家有效的提升國際觀,讓台灣人才競爭力逆風高灰超英趕美。

概念其實不難,就跟之前做的東西一樣,我是用python2.7 來實作,著眼點是它的lxml 套件,不過python2.7 對utf-8 的支援沒那麼好,script 開始前要把default encoding 設定為utf-8,不然常會印出亂碼。
reload(sys)
sys.setdefaultencoding('utf-8')
首先用urllib2把網頁抓下來,因為這個網頁會cache 要求過的內容,因此要用這樣來開啟網頁,讓HTTP proxy server不要cache 回傳的資料。
request = urllib2.Request(TARGET)
request.add_header("Pragma", "no-cache")
response = urllib2.build_opener().open(request)
再來用lxml把裡面問題和答案的部分給挖出來,填到一個python dictionary 即可,每抓一次都會比對不要抓到重複的東西。
因為爬蟲有時候會遇到網頁錯誤,因此一定要把爬過的東西先存下來,不然跑一跑壞掉了,重跑又要重抓資料,會哭的;幸好在python 上面有pickle 的支援,serialize 資料算相當方便,只要在開始的時候,先用pickle 讀入一個字典檔,沒有的話就回一個空的:
def openPickle():
  try:
    return pickle.load(open("global", "rb"))
  except (EOFError, IOError):
    return {}
然後存檔也很簡單,一行就解決了:
pickle.dump(data, open("global", "wb"))
再來就是一直跑一直跑一直跑,題目就會如洪水般湧進來,老實說挖出來的東西比我想得還要多…好多,wc 一下有1500多行,估計大約就是750 題左右吧。
Well 至於我爬出來的東西,我就無償公開好了,反正這種東西你它的網站一直按F5 也可以抓全,我只是請機器人幫我抓,原始碼跟大補帖放在這裡:
原始碼:https://github.com/yodalee/globalizaion
大補帖:https://github.com/yodalee/globalizaion/blob/master/global
其實我對這個題…沒什麼意見啦,不過我還是不樂見有人真的把這個拿來背(是…應該不會有人這麼蠢吧…應該啦……),畢竟與其死背希特勒是哪國人,還不如去了解他崛起的背景,與其多看大補帖還不如念念「希特勒回來了」。

不過自從我把大補帖公平出來之後,受到各方熱烈的回應,在此僅節錄幾則:
使用者評價一:自從用了國際觀大補帖,頭腦就靈光了很多,考試都考87分呢!
使用者評價二:上學的時候我國際相關的東西都答不出來,自從用國際觀大補帖,成績突飛猛進,現在已經準備要考托福跟日檢N1了。
使用者評價三:原本人生一片黑暗,直到遇到國際觀大補帖,和家人關係變好不說,上周不但交到了女友,老闆還幫我加薪25元呢。
使用者評價四:看國際觀大補帖,平常和朋友聊天信手拈來就是一堆國際知識,朋友們都改用欽佩的眼光看我,覺得我人生從此都不一樣了。
使用者評價五:之前男朋友都看不起我,自從把國際觀大補帖印下來帶在身邊,除了平時閱讀增進國際知識,男朋友欺負我的時候還可以用厚重的大補帖打他的臉,被沉重的歷史感打到一定很痛!
使用者評價六:難得一見的好書,我把每一題都記得滾瓜爛熟,上周考汽車駕照一次就通過了,謝謝你,國際觀大補帖。

Ps. 其實這篇寫程式的時間遠不及寫上面那堆嘴砲文的時間lol

沒有留言:

張貼留言