天天看點

網絡蜘蛛爬蟲 Scrapy - 簡介&Demo

  • 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連結中的規律, 以及頁面中要爬取内容所在位置的規則, 來下載下傳我們需要的内容.

那麼問題來了,

  1. 什麼是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 連結肯定也都是類似的規則.

    如果按正則比對的話, 就是:

    這就是汽車之家論壇中文章的規則, 注意: 這個隻是為了舉例, 實際的規則會有偏差.

  2. 什麼是頁面中要爬取内容所在位置的規則呢?

    光看這段話, 好像有點暈, 我們把它分成一個數組來了解一下.

    [“頁面中要爬取内容”, “在頁面中的位置”, “所在位置的規則”]

    好像有點懂了.

    舉個例子:

    <html>
    <head>
        <title>标題</title>
    </head>
    <body>
        <div>
            要爬取的内容
        <div>
    </body>
    </html>
               
    PATH 規則:

    /html/body/div/text()

    按照 DOM 元素所在的位置逐級找到它 “/html/body/div”, 然後取它的文本内容 “text()”

    按照我們開發網頁的習慣, 我們都知道, 所有涉及到文章内容的頁面, 肯定都是采用的同樣一個頁面模闆, 頁面元素的位置, 在規則上不會有太大的變動.

有了爬取的規則, 我們再編寫一系列頁面請求和業務處理, 自然就能爬取到各種各樣, 我們所需要的”食物”了.

Coding

這裡我們使用 Python 的開源架構 Scrapy, 它的 官方文檔 很詳細, 使用方法也很簡單.

官方安裝指南

簡易安裝介紹

入門教程

還是一樣, 選擇汽車之家論壇的文章标題和内容, 作為我們最終爬取的目标.

源碼: autohome_bss_buick

有注釋, 就不多贅述了.

爬取的”食物”, 如圖:

網絡蜘蛛爬蟲 Scrapy - 簡介&amp;Demo
網絡蜘蛛爬蟲 Scrapy - 簡介&amp;Demo

繼續閱讀