建立搜尋引擎 (search engine) ，你有什麼收穫呢?
你曾建立一個，對嗎？
是的，如果你想要建立一個搜尋引擎
我認為最重要的事
是從一個非常好的語料庫 (corpus) 開始
我們以前使用 WWW，它比今天的 WWW 小多了
但是它仍很新奇、令人興奮的
有各種出乎意料的事情
因此課程前三單元的目標，是建立語料庫
藉由爬行網頁來為我們的搜尋引擎建立語料庫
爬行網頁是網頁蜘蛛 (web crawler) 的工作
網頁蜘蛛是一個從網路收集內容的程式
想像一個你在瀏覽器看到的網頁，一個這樣的網頁
我們將使用 udacity 的網站做為網頁的例子
它有很多內容，有一些圖像，有一些文字
當您請求這個網頁時， 所有的內容都來到你的瀏覽器 (browser)
重要的是，網頁含有連結 (link)
連結 (link) 是什麼? link 通往另一個網頁
有一個通往「常見問題」的 link
有一個通往 CS101 網頁的 link
還有其他一些 link
link 在瀏覽器中顯示的時候，可能帶有底線
也可能沒有，取決於瀏覽器的設定
重要的是
link 是通往其他網頁的指引
而其他網頁也可能含有 link
這個網頁上有另一個 link
也許它通往我的名字，你可以跟隨它通往我的首頁 (homepage)
網頁蜘蛛能找到的所有網頁
都是跟隨 link 而找到的
沒有必要找出網路中的每個網頁
如果我們從一個好的種子網頁 (seed page) 開始
就可以找到很多網頁
網頁蜘蛛要做的，就是從一個網頁開始
找出網頁中所有的 link，跟隨它們，找到其他的網頁
然後在這些網頁裡，繼續跟隨網頁中的 link
以找到其他網頁，那些網頁中有更多的 link
最後，我們收集到網路中很多的網頁
這就是我們要網頁蜘蛛做的事
我們希望找到方法，從一個 seed page 開始
擷取網頁上的 link
跟隨這些 link 找到其他的網頁
然後收集那些網頁中的 link
跟隨它們，收集所有的 link
好像有很多事要做
第一節課不會完成所有的事情
第一單元要做的，只是擷取一個 link
我們將從一堆文字開始
其中帶有 URL 的 link
我們要找出那個 URL
這樣才能請求下一個網頁
第二單元的目標是
能夠持續地做下去
如果網頁中有很多 link，你要把它們全找出來
第二單元要做的
是要弄清楚如何持續的擷取所有的 link
第三單元，嗯，我們將超越一個網頁
第二單元結束時，我們能夠印出一個網頁中的所有 link
第三單元我們要收集所有的 link，才可以持續下去
直到網頁蜘蛛收集了很多、很多的網頁
第三單元結束時，我們將建立一個網頁蜘蛛
我們有一個建立語料庫的方法
剩下三個單元重點在於，如何回應查詢 (queries)
第四單元我們將探討，如何給出好的回應
當搜索一個關鍵字 (keyword) 時， 我們要給出一個網頁列表 (list) 當作回應
列表中的網頁都出現了關鍵字
第五單元我們將思考， 如果有一個很大的語料庫，如何擴展規模
第六單元要做的，不只是找出一個網頁列表
而是要找出最佳的網頁
我們將探討，如何為含有關鍵字的網頁來評分
我們已經講得有點遠了
因為第一單元要做的只是
思考如何從網頁中擷取一個 link
課程結束時，我們所建立的搜尋引擎
將是一個功能完整的搜尋引擎
它將擁有像 Google 這種搜尋引擎所具備的主要元件
它當然不會像 Google 那麼強大
我們想要簡單一點
我們只要寫少量的程式
要記住我們的目標
重點不是建立一個搜尋引擎
而是將建立搜尋引擎當作一個手段
來學習電腦科學
以及學習程式設計
透過這樣的學習
將讓我們有能力解決很多、很多其他的問題