- Company: Yappam
- Date: 20150325
- Author: Yuewen Hao
序
大家都說現在是移動網際網路的時代, 那麼有”網”的地方, 就肯定有”蜘蛛”.
今天, 我們就來在這個連接配接着全世界的巨型網絡中, 創造一隻小小的”蜘蛛”, 去爬取我們想要的”食物”.
引
說到爬蟲, 我最初接觸到它, 應該是在一部關于 網際網路之子 – Aaron Swartz 的記錄片中, 其中, 有一個橋段:
Aaron覺得那些對人類有價值的科學和文化遺産屬于全人類,美國大學每年會向那些出版學術期刊、論文的機構(比如 ISI,Jstor)支付許可費用,許可費用極高,他覺得這是這個時代的悲劇。于是完美主義的他産生了一種責任感。
這讓他在2010年到2011年,在哈佛大學Edmond J. Safra研究實驗室以Lab Fellow的身份主導到了“制度腐敗”課題的研究。也因為這個身份,Aaron在MIT做通路學者的時候有 JSTOR的帳号可以通過MIT的網絡通路大量的學術期刊。
于是,他把他的laptop放到了地下室網絡交換機的機房中,直接插上網線,然後全天後地下載下傳那些JSTOR的學術期刊。(他利用了這些學術期刊的URL連結中的規律來下載下傳所有的期刊)
這個紀錄片, 讓我對網際網路的自由, 開源, 分享 有了全新的定義, 感觸很深; 同時也感受到 Aaron 處于這個社會的那種無助, 悲傷. 推薦熱愛網際網路的你去感受一下.
正文
好了, 閑話少說, 引文中 “利用 URL 連結中的規律, 下載下傳期刊”, 便是網絡爬蟲的核心理念. 準确的來說, 是利用URL連結中的規律, 以及頁面中要爬取内容所在位置的規則, 來下載下傳我們需要的内容.
那麼問題來了,
-
什麼是URL 連結中的規則呢?
http://club.autohome.com.cn/bbs/thread-c-875-39780593-1.html
http://club.autohome.com.cn/bbs/thread-c-875-18770776-1.html
上面兩個URL連結, 是汽車之家論壇中, 兩篇文章.
做過開發的人都知道. 其他文章的URL 連結肯定也都是類似的規則.
如果按正則比對的話, 就是:
這就是汽車之家論壇中文章的規則, 注意: 這個隻是為了舉例, 實際的規則會有偏差.
-
什麼是頁面中要爬取内容所在位置的規則呢?
光看這段話, 好像有點暈, 我們把它分成一個數組來了解一下.
[“頁面中要爬取内容”, “在頁面中的位置”, “所在位置的規則”]
好像有點懂了.
舉個例子:
PATH 規則:<html> <head> <title>标題</title> </head> <body> <div> 要爬取的内容 <div> </body> </html>
/html/body/div/text()
按照 DOM 元素所在的位置逐級找到它 “/html/body/div”, 然後取它的文本内容 “text()”
按照我們開發網頁的習慣, 我們都知道, 所有涉及到文章内容的頁面, 肯定都是采用的同樣一個頁面模闆, 頁面元素的位置, 在規則上不會有太大的變動.
有了爬取的規則, 我們再編寫一系列頁面請求和業務處理, 自然就能爬取到各種各樣, 我們所需要的”食物”了.
Coding
這裡我們使用 Python 的開源架構 Scrapy, 它的 官方文檔 很詳細, 使用方法也很簡單.
官方安裝指南
簡易安裝介紹
入門教程
還是一樣, 選擇汽車之家論壇的文章标題和内容, 作為我們最終爬取的目标.
源碼: autohome_bss_buick
有注釋, 就不多贅述了.
爬取的”食物”, 如圖:
