標籤:des style blog http 使用 strong
所謂網路爬蟲,就是一個在網上到處或定向抓取資料的程式,當然,這種說法不夠專業,更專業的描述就是,抓取特定網站網頁的HTML資料。不過由於一個網站的網頁很多,而我們又不可能事Crowdsourced Security Testing道所有網頁的URL地址,所以,如何保證我們抓取到了網站的所有HTML頁面就是一個有待考究的問題了。一般的方法是,定義一個入口頁面,然後一般一個頁面會有其他頁面的URL,於是從當前頁面擷取到這些URL加入到爬蟲的抓取隊列中,然後進入到新頁面後再遞迴的進行上述的操作,其實說來就跟深度遍曆或廣度遍曆一樣。
Scrapy是一個基於Twisted,純Python實現的爬蟲架構,使用者只需要定製開發幾個模組就可以輕鬆的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便~
Scrapy 使用 Twisted這個非同步網路程式庫來處理網路通訊,架構清晰,並且包含了各種中介軟體介面,可以靈活的完成各種需求。整體架構如所示:
綠線是資料流向,首先從初始URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載之後會交給 Spider 進行分析,Spider分析出來的結果有兩種:一種是需要進一步抓取的連結,例如之前分析的“下一頁”的連結,這些東西會被傳回 Scheduler ;另一種是需要儲存的資料,它們則被送到Item Pipeline 那裡,那是對資料進行後期處理(詳細分析、過濾、儲存等)的地方。另外,在資料流動的通道裡還可以安裝各種中介軟體,進行必要的處理。
1.建立一個Scrapy項目:scrapy startproject 項目名
Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.T:\>scrapy startproject tutorialT:\>
這個命令會在目前的目錄下建立一個新目錄tutorial,它的結構如下:
T:\tutorial>tree /fFolder PATH listingVolume serial number is 0006EFCF C86A:7C52T:.│ scrapy.cfg│└─tutorial │ items.py │ pipelines.py │ settings.py │ __init__.py │ └─spiders __init__.py
這些檔案主要是:
- scrapy.cfg: 項目設定檔
- tutorial/: 項目python模組, 呆會代碼將從這裡匯入
- tutorial/items.py: 項目items檔案
- tutorial/pipelines.py: 項目管道檔案
- tutorial/settings.py: 項目設定檔
- tutorial/spiders: 放置spider的目錄
定義Item
Items是將要裝載抓取的資料的容器,它工作方式像python裡面的字典,但它提供更多的保護,比如對未定義的欄位填充以防止拼字錯誤。
它通過建立一個scrapy.item.Item類來聲明,定義它的屬性為scrpy.item.Field對象,就像是一個對象關係映射(ORM).
在items.py檔案中,定義一個scrapy.item.Item類,在其中定義我們想要從抓取到的網頁資料中解析擷取的資料的Field(scrpy.item.Field類型)
from scrapy.item import Item, Field class DmozItem(Item): title = Field() link = Field() desc = Field()
定義Spider
他們定義了用於下載的URL的初步列表,如何跟蹤連結,以及如何來解析這些網頁的內容用於提取items。
要建立一個Spider,你必須為scrapy.spider.BaseSpider建立一個子類,並確定三個主要的、強制的屬性:
- name:爬蟲的識別名,它必須是唯一的,在不同的爬蟲中你必須定義不同的名字.
- start_urls:爬蟲開始爬的一個URL列表。爬蟲從這裡開始抓取資料,所以,第一次下載的資料將會從這些URLS開始。其他子URL將會從這些起始URL中繼承性產生。
- parse():爬蟲的方法,調用時候傳入從每一個URL傳回的Response對象作為參數,response將會是parse方法的唯一的一個參數,
這個方法負責解析返回的資料、匹配抓取的資料(解析為item)並跟蹤更多的URL。