scrapy入門教程2:建立一個簡單的爬取南郵新聞標題的爬蟲demo

發表於2016-06-02

0. 基本環境說明

  1. 本文截圖及執行環境均在MAC OS X 10.9.5上實現,但基本步驟與win 7環境上相同(其實我是先在win7折騰了一把,然後為了寫這篇教程,又在OS X 上面重新搞了一遍)
  2. scrapy版本為1.0
  3. 參考文獻以及下載連結:

1. 建立步驟

通過上一篇內容我們已經將scrapy環境配置完畢,下面我們來實現一個demo來爬取南京郵電大學新聞頁面的內容。

1. 建立一個新工程

輸入以上命令之後,就會看見命令列執行的目錄下多了一個名為njupt的目錄,目錄的結構如下:

至此,工程建立完畢。

2. 設定 items

本文以抓取南郵新聞為例,需要儲存三種資訊:

  1. 南郵新聞標題
  2. 南郵新聞時間
  3. 南郵新聞的詳細連結

items內部程式碼如下:

至於為什麼每一句都用scrapy.Field(),這個等請關注我的後續教程,現在只要記住按照以上的格式來新增新的要提取的屬性就可以了~。

3. 編寫 spider

spider是爬蟲的主體,負責處理requset response 以及url等內容,處理完之後交給pipelines進行進一步處理。
設定完items之後,就在spiders目錄下新建一個njuptSpider.py檔案,內容如下:

其中

  1. name為爬蟲名稱,在後面啟動爬蟲的命令當中會用到。
  2. allowed_domains為允許爬蟲爬取的域名範圍(如果連線到範圍以外的就不爬取)
  3. start_urls表明爬蟲首次啟動之後訪問的第一個Url,其結果會被自動返回給parse函式。4.
  4. parse函式為scrapy框架中定義的置函式,用來處理請求start_urls之後返回的response,由我們實現
  5. news_page_num = 14page_num = 386別表示每頁的新聞數目,和一共有多少頁,本來也可以通過xpath爬取下來的,但是我實在是對我們學校的網站製作無語了,html各種混合,於是我就偷懶手動輸入了。
  6. 之後通過item = NjuptItem()來使用我們之前定義的item,用來儲存新聞的url、標題、日期。(這裡面有一個小技巧就是通過|來接連xpath可以一次返回多個想要抓取的xpath)
  7. 通過yield item來將儲存下來的item交由後續的pipelines處理
  8. 之後通過生成next_page_url來通過scrapy.Request抓取下一頁的新聞資訊
  9. scrapy.Request的兩個引數,一個是請求的URL另外一個是回撥函式用於處理這個requestresponse,這裡我們的回撥函式是parse_news
  10. parse_news裡面的步驟和parse差不多,當然你也可以改造一下parse然後直接將其當做回撥函式,這樣的話一個函式就ok了

4. 編寫 pipelines

初次編寫可以直接編輯njupt目錄下的pipelines.py檔案。pipelines主要用於資料的進一步處理,比如型別轉換、儲存入資料庫、寫到本地等。
本爬蟲pipelines如下:

其實pipelines是在每次spideryield item 之後呼叫,用於處理每一個單獨的item。上面程式碼就是實現了在本地新建一個njupt.txt檔案用於儲存爬取下來的內容。

5. 編寫 settings.py

settings.py檔案用於儲存爬蟲的配置,有很多種配置,由於是入門教程,不需要配置很多,我們這裡就新增一下剛才編寫的pipelines就行了。檔案內容如下。

6. 啟動爬蟲與檢視結果

以上步驟全部完成之後,我們就啟動命令列,然後切換執行目錄到njuptspider目錄下,通過以下命令啟動爬蟲

經過一段時間的風狂爬取,爬蟲結束。會報一些統計資訊

scrapy入門教程2:建立一個簡單的爬取南郵新聞標題的爬蟲demo

最後讓我們來檢視一下爬取成果

scrapy入門教程2:建立一個簡單的爬取南郵新聞標題的爬蟲demo

至此,大功告成~

相關文章