最近聽到有人提起新需求,就寫了一個小工具,需求情境如下:假設有人叫你到某個網頁看"名單"(每月公告1次),然後根據"名單"去更改你SQL資料庫某張table的內容,如果名單很長,眼睛會看到花掉,手也會很痠,而且每個月只做1次,常常忘了做!所以你會想寫一個小工具,設到作業系統的"排程"裡面,每月或每周1次,時間到了,排程自然會呼叫小工具去幫你做這件事,做完會將結果存成log檔,你有空再去看看log即可!本篇blog有不足之處,日後補上,引用本篇blog不必註明出處,但程式部分有些參考網路上的資料而修改的,請注意智慧財產權,
程式參考網站:
1.C#實現通過程序自動抓取遠程Web網頁信息的代碼
http://dark99.pixnet.net/blog/post/38459994-c%23%E5%AF%A6%E7%8F%BE%E9%80%9A%E9%81%8E%E7%A8%8B%E5%BA%8F%E8%87%AA%E5%8B%95%E6%8A%93%E5%8F%96%E9%81%A0%E7%A8%8Bweb%E7%B6%B2%E9%A0%81%E4%BF%A1%E6%81%AF%E7%9A%84%E4%BB%A3
2.Windows 7-善用工作排程器
http://isvincent.pixnet.net/blog/post/38936955-windows-7-%E5%96%84%E7%94%A8%E5%B7%A5%E4%BD%9C%E6%8E%92%E7%A8%8B%E5%99%A8
程式細節:
這個算是初級的crawler(網路爬蟲),程式大略分三部分:
- 1.去網路上抓資料(圖1),
- 2.解析抓回來的資料(圖2),
- 3.連到SQL資料庫做事(圖3),
注意事項:
程式需要做"例外處理"增強程式的強固性(robust),避免程式因發生例外而中止執行。無論是利用C#語言特性(try-catch機制)或是函數回傳值判斷等等,
本篇blog附上範例程式的使用方式:
1.本篇blog是以windows7電腦為例子,請自行去微軟官網下載.net framework SDK或是Visual Studio 201X community(稍早的VS2010免費版叫express)來安裝,安裝好之後請到"開始"->"所有程式"->Visual Studio 201X community,找看看裡面是否有VS201X x86 Tools命令提示字元,跑起來就是一個MS-DOS命令列視窗,
2.將本篇blog附上的zip檔解壓縮,用"記事本"打開crawler3.cs開始依自己需求編輯程式,存檔,
3.另外AssemblyInfo.cs也可用記事本打開進去編輯,稍後編譯成功會在build目錄內看到可執行檔(*.exe),將滑鼠移到這個檔名可看到版號跟公司名,
4.另外crawler3.exe.config也可用記事本打開進去編輯,這個檔是用來指定要將source編譯成哪個目標平台(.net framework的版本)的可執行檔, 在編譯完成之後要跟.exe放在一起才會有作用,假設你把這個可執行檔拿到win xp(.net framework最高到4.0)去跑,自動先幫你檢查目前電腦內是否有裝目標平台(.net 4.6),結果沒有,就會跳出一個警告視窗說你缺少.net framework 4.6,請你先去裝好再來跑這個可執行檔,這個.config假設沒跟.exe放在同一目錄下或是名字不一致,就會跳過這個檢查,然後以目前最高版本.net 4.0(假設你xp有裝.net 4.0的話)來跑可執行檔,直到碰壁為止(遇到call .net 4.6的api就會exception跳出),
5.另外一個AssemblyAttributes.cs也可用記事本打開編輯,這個檔也是告訴編譯器csc.exe要用哪個目標.net framework版本下去編譯,搭配參數/reference指定引用哪個目標版本的library,
6.在步驟一開啟的MS-DOS命令視窗內,輸入dos指令到達剛解壓縮目錄內的src目錄底下,輸入"build"按enter開始編譯,因為有加參數"/debug+",編譯成功後除了產生可執行檔外還會產生*.pdb,這個是用來讓你可以進去VS201X community裡面逐步執行debug用的,也就是可執行檔案產生之後,除了直接輸入"crawler3.exe"來跑程式,也可輸入"devenv crawler3.exe",進到VS201X後馬上按F11(逐步偵錯)會叫出crawler3.cs,可在某行設置中斷點debug,利用VS201X來跑你的執行檔另一個好處是可將VS201X當成sandbox,無論你的程式寫的多糟糕導致不可預期的例外發生都會被侷限在VS201X內部,若你在"檔案總管"左鍵點兩下跑可執行檔,到時候程式當掉,可能會危及作業系統當時正在跑的其他應用程式,
p.s.devenv.exe就是你裝的Visual Studio 201X的執行檔(VS201X的桌面捷徑->右鍵"內容"),有些版本的VS201X不叫devenv.exe而是別的名稱,
7.參考上面說的網頁"Windows 7-善用工作排程器",將crawler3.exe設到排程裡頭,時間到了,排程器會叫醒crawler3.exe起來工作,到時候就可以到D槽底下找今天日期的log檔,
範例程式:
https://drive.google.com/file/d/0B6EVEd5P2B9cVW90bzdDMGZhQkU/view?usp=sharing