天天看點

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

這是一款提取網站資料的開源工具。scrapy架構用python開發而成,它使抓取工作又快又簡單,且可擴充。我們已經在virtual box中建立一台虛拟機(vm)并且在上面安裝了ubuntu 14.04 lts。

<a target="_blank"></a>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

scrapy依賴于python、開發庫和pip。python最新的版本已經在ubuntu上預裝了。是以我們在安裝scrapy之前隻需安裝pip和python開發庫就可以了。

pip是作為python包索引器easy_install的替代品,用于安裝和管理python包。pip包的安裝可見圖 1。

<code>sudo apt-get install python-pip</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:1 pip安裝

我們必須要用下面的指令安裝python開發庫。如果包沒有安裝那麼就會在安裝scrapy架構的時候報關于python.h頭檔案的錯誤。

<code>sudo apt-get install python-dev</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:2 python 開發庫

scrapy架構既可從deb包安裝也可以從源碼安裝。在圖3中我們用pip(python 包管理器)安裝了deb包了。

<code>sudo pip install scrapy</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:3 scrapy 安裝

圖4中scrapy的成功安裝需要一些時間。

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:4 成功安裝scrapy架構

我們将用scrapy從fatwallet.com上提取商店名稱(賣卡的店)。首先,我們使用下面的指令建立一個scrapy項目“store name”, 見圖5。

<code>$sudo scrapy startproject store_name</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:5 scrapy架構建立項目

上面的指令在目前路徑建立了一個“store_name”的目錄。項目主目錄下包含的檔案/檔案夾見圖6。

<code>$sudo ls –lr store_name</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:6 store_name項目的内容

每個檔案/檔案夾的概要如下:

scrapy.cfg 是項目配置檔案

store_name/ 主目錄下的另一個檔案夾。 這個目錄包含了項目的python代碼

store_name/items.py 包含了将由蜘蛛爬取的項目

store_name/pipelines.py 是管道檔案

store_name/settings.py 是項目的配置檔案

store_name/spiders/, 包含了用于爬取的蜘蛛

由于我們要從fatwallet.com上如提取店名,是以我們如下修改檔案(lctt 譯注:這裡沒說明是哪個檔案,譯者認為應該是 items.py)。

<code>import scrapy</code>

<code></code>

<code>class storenameitem(scrapy.item):</code>

<code>name = scrapy.field() # 取出卡片商店的名稱</code>

之後我們要在項目的store_name/spiders/檔案夾下寫一個新的蜘蛛。蜘蛛是一個python類,它包含了下面幾個必須的屬性:

蜘蛛名 (name )

爬取起點url (start_urls)

包含了從響應中提取需要内容相應的正規表達式的解析方法。解析方法對爬蟲而言很重要。

我們在storename/spiders/目錄下建立了“storename.py”爬蟲,并添加如下的代碼來從fatwallet.com上提取店名。爬蟲的輸出寫到檔案(storename.txt)中,見圖7。

<code>from scrapy.selector import selector</code>

<code>from scrapy.spider import basespider</code>

<code>from scrapy.http import request</code>

<code>from scrapy.http import formrequest</code>

<code>import re</code>

<code>class storenameitem(basespider):</code>

<code>name = "storename"</code>

<code>allowed_domains = ["fatwallet.com"]</code>

<code>start_urls = ["http://fatwallet.com/cash-back-shopping/"]</code>

<code>def parse(self,response):</code>

<code>output = open('storename.txt','w')</code>

<code>resp = selector(response)</code>

<code>tags = resp.xpath('//tr[@class="storelistrow"]|\</code>

<code>//tr[@class="storelistrow even"]|\</code>

<code>//tr[@class="storelistrow even last"]|\</code>

<code>//tr[@class="storelistrow last"]').extract()</code>

<code>for i in tags:</code>

<code>i = i.encode('utf-8', 'ignore').strip()</code>

<code>store_name = ''</code>

<code>if re.search(r"class=\"storeliststorename\"&gt;.*?&lt;",i,re.i|re.s):</code>

<code>store_name = re.search(r"class=\"storeliststorename\"&gt;.*?&lt;",i,re.i|re.s).group()</code>

<code>store_name = re.search(r"&gt;.*?&lt;",store_name,re.i|re.s).group()</code>

<code>store_name = re.sub(r'&gt;',"",re.sub(r'&lt;',"",store_name,re.i))</code>

<code>store_name = re.sub(r'&amp;amp;',"&amp;",re.sub(r'&amp;amp;',"&amp;",store_name,re.i))</code>

<code>#print store_name</code>

<code>output.write(store_name+""+"\n")</code>

如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy如何在Ubuntu 14.04 LTS安裝網絡爬蟲工具:Scrapy

圖:7 爬蟲的輸出

注意: 本教程的目的僅用于了解scrapy架構

----------------------------------------------------------------------------------------------------------------------------