精通Python爬蟲從Scrapy到行動裝置 App(文末福利)

來源:互聯網
上載者:User

標籤:python 爬蟲

我能夠聽到人們的尖叫聲:“Appery.io是什麼,一個手機應用的專用平台,它和Scrapy有什麼關係?”那麼,眼見為實吧。你可能還會對幾年前在Excel試算表上給某個人(朋友、管理者或者客戶)展示資料時的情境印象深刻。不過現如今,除非你的聽眾都十分老練,否則他們的期望很可能會有所不同。在接下來的幾頁裡,你將看到一個簡單的手機應用,這是一個只需幾次單擊就能夠建立出來的最小可視化產品,其目的是向利益相關者傳達抽取所得資料的力量,並回到生態系統中,以源網站網路流量的形式展示它能夠帶來的價值。

我將盡量保持簡短的啟發學習法樣本,在這裡它們將展示如何充分利用你的資料。

1.1 選擇手機應用程式框架

藉助於適當的工具向手機應用提供資料將是非常容易的事情。目前有許多優秀的跨平台手機應用開發架構,如PhoneGap、使用Appcelerator雲端服務的Appcelerator、jQuery Mobile和Sencha Touch。

本文將使用Appery.io,因為它可以讓我們使用PhoneGap和jQuery Mobile快速建立iOS、Android、Windows Phone以及HTML5手機應用。我和Scrapy都與Appery.io無任何利益關聯。我會鼓勵你獨立進行調研,看看除了本文中提出的功能外,它是否也能符合你的需求。請注意這是一個付費服務,你可以有14天的試用期,不過在我看來,它可以讓人無需動腦就能快速開發出原型,尤其是對於那些不是網路專家的人來說,為此付費是值得的。我選擇該服務的主要原因是它既能提供手機應用,也能提供後端服務,也就是說我們不需要再去設定資料庫、編寫REST API或為服務端及手機應用使用其他一些語言。你將看到,我們一行代碼都不用去編寫!我們將會使用它們的線上工具;在任何時候,你都可以下載該應用,並作為PhoneGap項目,使用PhoneGap的所有功能。

在本文中,你需要接入互連網串連,以便使用Appery.io。同時,還需要注意的是該網站的布局可能在未來會有所變化。請將我們的截屏作為參考,而不要在發現該網站外觀不同時感到驚訝。

1.2 建立資料庫和集合

第一步是通過單擊Appery.io網站上的Sign-Up按鈕並選取免費方案,來註冊免費的Appery.io方案。你需要提供使用者名稱、郵箱地址以及密碼,然後就會建立好新賬戶了。等待幾秒鐘後,賬戶完成啟用。然後就可以登入到Appery.io的儀錶盤了。現在,開始準備建立新的資料庫以及集合,1.1所示。

圖1.1 使用Appery.io建立新資料庫及集合

為了完成該操作,需要按照如下步驟執行。

1.單擊Databases選項卡(1)。

2.然後單擊綠色的Create new database(2)按鈕。將新資料庫命名為scrapy(3)。

3.現在,單擊Create按鈕(4)。此時會自動開啟Scrapy資料庫的儀錶盤,在這裡,你可以建立新的集合。

在Appery.io的術語中,一個資料庫是由一組集合組成的。大致來說,一個應用使用一個單獨的資料庫(至少在最初時是這樣),每個資料庫中包含多個集合,比如使用者、房產、訊息等。Appery.io預設已經提供了一個Users集合,其中包括使用者名稱和密碼(它們有很多內建功能)。圖1.2所示為建立集合的過程。

圖1.2 使用Appery.io建立新資料庫及集合

現在,我們添加一個使用者,使用者名稱為root,密碼為pass。當然,你也可以選擇更加安全的使用者名稱和密碼。為實現該目的,請單擊側邊欄的Users集合(1),然後單擊+Row添加使用者/行(2)。在出現的兩個欄位中填入使用者名稱和密碼(3)和(4)。

我們還需要建立一個新的集合,用於儲存Scrapy抓取到的房產資料,並將該集合命名為properties。通過單擊綠色的Create new collection按鈕(5),將其命名為properties(6),然後單擊Add按鈕(7),就可以建立新的集合了。現在,我們還必須對該集合進行一些定製化處理。單擊+Col添加資料庫列(8)。每個資料庫列都有其類型,用於對值進行校正。除了價格是數實值型別外,大部分欄位都是簡單的字串類型。我們將通過單擊+Col添加幾個列(8),並填充列名(9),如果不是字串類型的話,還需要選擇類型(10),然後單擊Create column按鈕(11)。重複該過程5次,建立表1.1中展示的列。

表1.1

在集合建立的最後,你應該已經將所需的所有列都建立完成了,就像表1.1中所示的那樣。現在已經準備好從Scrapy中匯入一些資料了。

1.3 使用Scrapy填充資料庫

首先,我們需要一個API key。我們可以在Settings選項卡(1)中找到它。複製該值(2),然後單擊Collections選項卡(3)回到房產集合中,過程1.3所示。

圖1.3 使用Appery.io建立新資料庫及集合

非常好!現在需要將資料匯入到Appery.io中。我們先將項目以及名為easy的爬蟲(easy.py)複製過來,並將該爬蟲重新命名為tomobile(tomobile.py)。同時,編輯檔案,將其名稱設為tomobile。

你可能已經注意到的一個問題是,這裡並沒有使用之前文節中用過的Web伺服器(http://web:9312),而是使用了該網站的一個公開可用的副本,這是我存放在http://scrapybook.s3.amazonaws.com上的副本。之所以在本文中使用這種方式,是因為這樣可以使圖片和URL都能夠公開可用,此時就可以非常輕鬆地分享應用了。

我們將使用Appery.io的管道來插入資料。Scrapy管道通常是一個很小的Python類,擁有後置處理、清理及儲存Scrapy Item的功能。就目前來說,你可以使用easy_install或pip安裝它,不過如果你使用的是我們的Vagrant dev機器,則無需進行任何操作,因為我們已經將其安裝好了。



此時,你需要對Scrapy的主設定檔案進行一些小修改,將之前複製的API key添加進來。現在,我們所需要做的就是將如下行添加到properties/settings.py檔案中。

不要忘記將APPERYIO_DB_ID替換為你的API key。此外,還需要確保設定中的使用者名稱和密碼,要和你在Appery.io中建立資料庫使用者時使用的相同。要想向Appery.io的資料庫中填充資料,請像平常那樣啟動scrapy crawl。


這次的輸出會有些不同。可以看到在最開始的幾行中,有一行是用於啟用ApperyIoPipeline這個Item管道的;不過最明顯的是,你會發現儘管抓取了100個Item,但是卻有200次請求/響應。這是因為Appery.io的管道對每個Item都執行了一個到Appery.io服務端的額外請求,以便寫入每一個Item。這些帶有api.appery.io這個URL的請求同樣也會在日誌中出現。

當回到Appery.io時,可以看到在properties集合(1)中已經填充好了資料(2),1.4所示。

圖1.4 使用資料填充properties集合

1.4 建立手機應用

建立一個新的手機應用非常簡單。我們只需單擊Apps選項卡(1),然後單擊綠色的Create new app按鈕(2)。填寫應用程式名稱為properties(3),然後單擊Create按鈕進行建立就可以了,該過程1.5所示。

圖1.5 建立新手機應用及資料庫集合

1.4.1 建立資料庫訪問服務

建立新應用時的選項數量可能會有些多。使用Appery.io的應用編輯器,可以寫出複雜的應用,不過我們將儘可能保持事情簡單。我們最初需要的就是建立一個服務,能夠讓我們從應用中訪問Scrapy資料庫。為了達到這一目的,需要單擊長方形的綠色按鈕CREATE NEW(5),然後選擇Database Services(6)。這時會彈出一個新的對話方塊,讓我們選擇想要串連的資料庫。選擇scrapy資料庫(7)。這個菜單中的大部分選項都不會用到,現在只需要單擊展開properties地區(8),然後選擇List(9)。在後台,它會為我們編寫代碼,使得我們使用Scrapy爬取的資料可以在網路上使用。最後,單擊Import selected services按鈕完成(10)。

1.4.2 建立使用者介面

下面將要開始建立應用所有的可視化元素了,這將會使用編輯器中的DESIGN選項卡來實現,1.6所示。

圖1.6 建立使用者介面

從頁面左側的樹中,展開Pages檔案夾(1),然後單擊startScreen(2)。UI編輯器將會開啟該頁面,我們可以在其中添加一些控制項。下面使用編輯器編輯標題,以便對其更加熟悉。單擊頭部標題(3),然後會發現螢幕右側的屬性地區會變為顯示標題的屬性,其中包含一個Text屬性,將該屬性值修改為Scrapy App,螢幕中間的標題也會相應地更新。

然後,需要添加一個網格組件,從左側面板(5)中拖曳Grid控制項即可實現。該控制項有兩行,而根據我們的需求,只需要一行即可。選擇剛剛添加的網格。當手機視圖頂部的縮圖地區(6)變灰時,就可以知道該網格已經被選取了。如果沒有被選取,單擊該網格以便選中。然後右側的屬性欄會更新為網格的屬性。這裡只需要將Rows屬性設定為1,然後單擊Apply即可(7)和(8)。現在,該網格就會被更新為只有一行了。

最後,拖拽另外一些控制項到網格中。首先要在網格左側添加圖片控制項(9),然後在網格右側添加連結(10),最後在連結下面添加標籤(11)。

就布局而言,此時已經足夠。接下來將從資料庫中向使用者介面輸入資料。

1.4.3 將資料對應到使用者介面

目前為止,我們花費了大量時間在DESIGN選項卡中,以建立應用的視覺效果。為了將可用的資料連結到這些控制項中,需要切換到DATA選項卡(1),1.7所示。

圖1.7 將資料對應到使用者介面

選擇Service(2)作為資料來源類型。由於前面建立的服務是唯一可用的服務,因此它會被自動選取。然後可以繼續單擊Add按鈕(3),此時服務屬性將會在其下方列出。只要按下了Add按鈕,就會看到像Before send以及Success這樣的事件。我們可以通過單擊Success後面的Mapping按鈕,定製服務成功調用後要做的事情。

此時會開啟Mapping action editor,我們可以在這裡完成連線。該編輯器有兩側。左側是服務響應中可用的欄位,而在右側中可以看到前面步驟中添加的UI控制項的屬性。兩側都有一個Expand all連結,單擊該連結可以看到所有可用的資料和控制項。接下來,需要按照表1.2中給出的5個映射,從左側向右側拖曳。

表1.2

1.4.4 資料庫欄位與使用者介面控制項間映射

表1.2中項的數量可能會與你的情況有些許差別,不過由於每種控制項都只有一個,因此出錯的可能性非常小。通過設定這些映射,我們通知Appery.io在後台編寫所有代碼,以便在資料庫查詢成功時使用資料庫中的值載入控制項。下面,可以單擊Save and return按鈕(6)繼續。

此時又回到了DATA選項卡,1.7所示。由於還需要返回到UI編輯器當中,因此需要單擊DESIGN選項卡(7)。在螢幕下方,你會發現一個EVENTS地區(8),儘管該地區一直存在,但它剛剛才被展開。在EVENTS地區中,我們讓Appery.io做一些事情,作為對UI事件的響應。這是我們需要執行的最後一個步驟。它會讓應用在UI載入完成後立即調用服務取回資料。為了實現該功能,我們需要選擇startScreen作為組件,並將事件保持為預設的Load選項。然後選擇Invoke service作為action,保持Datasource為預設的restservice1選項(9)。最後,單擊Save(10),這就是我們為建立這個手機應用所做的所有事情了。

1.4.5 測試、分享及匯出你的手機應用

現在,可以測試這個應用了。我們所需要做的事情就是單擊UI產生器頂部的TEST按鈕(1),1.8所示。

圖1.8 運行在你瀏覽器中的手機應用

手機應用將會在瀏覽器中運行。這些連結都是有效(2),可以瀏覽。可以預覽不同的手機螢幕方案以及裝置方向,也可以單擊View on Phone按鈕,此時會顯示一個二維碼,你可以使用行動裝置掃描該二維碼,並預覽該應用。你只需分享其產生的連結,其他人也可以在他們的瀏覽器中嘗試該應用。

只需單擊幾下,我們就可以將Scrapy抓取的資料群組織起來,並展示在手機應用中。如果你需要更進一步地定製該應用,可以參考Appery.io提供的教程,其網址為http://devcenter.appery.io/tutorials/。當一切準備就緒時,就可以通過EXPORT按鈕匯出該應用了,Appery.io提供了非常豐富的匯出選項,1.9所示。

圖1.9 你可以將應用匯出到大部分主流移動平台

你可以匯出專案檔,在自己喜歡的IDE中進一步開發;也可以獲得二進位檔案,發布到各個平台的手機市場當中。

1.5 本文小結

使用Scrapy和Appery.io這兩個工具,我們擁有了一個可以抓取網站並且能夠將資料插入到資料庫中的系統。此外,我們還得到了RESTful API,以及一個簡單的可以用於Android和iOS的手機應用。對於進階特性和進一步開發,你可以更加深入到這些平台中,將其中部分開發工作外包給領域專家,或是研究替代方案。現在,你只需要最少的編碼,就能夠擁有一個可以示範應用理念的最小產品。

你會注意到,在如此短的開發時間中,我們的應用看起來還不錯。這是因為它使用了真實的資料,而不是預留位置,並且所有連結都是可用且有意義的。我們成功建立了一個尊重其生態(源網站)的最小可用產品,並以流量的形式將價值回饋給源網站。

現在,我們可以開始學習如何使用Scrapy爬蟲在更加複雜的情境下抽取資料了。

本文摘自《精通Python爬蟲架構Scrapy》

《精通Python爬蟲架構Scrapy》
【美】迪米特裡奧斯 考奇斯-勞卡斯(Dimitrios Kouzis-Loukas)箸

點擊封面購買紙書請添加連結描述

Python3 scrapy教程,全面剖析網路爬蟲技術的實現原理,通過爬取樣本示範Scrapy的應用,涵蓋從案頭端爬取到移動端爬取,即時爬取在內的所有內容。

本書講解了Scrapy的基礎知識,討論了如何從任意源提取資料,如何清理資料,以及如何使用Python和第三方API進行處理,以滿足自身需求。本書還講解了如何將爬取的資料高效地饋入資料庫、搜尋引擎和流資料處理系統(比如Apache Spark)。在學習完本書後,你將對資料爬取胸有成竹,並將資料應用在自己的應用程式中。



在“非同步社區”後台回複“關注”,即可免費獲得2000門線上視頻課程;推薦朋友關注根據提示擷取贈書連結,免費得非同步圖書一本。趕緊來參加哦!
掃一掃上方二維碼,回複“關注”參與活動!
閱讀原文,購買《精通Python爬蟲架構Scrapy》

精通Python爬蟲從Scrapy到行動裝置 App(文末福利)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.