- 數據可視化:從小白到數據工程師的成長之路
- 劉英華
- 4405字
- 2020-07-24 10:01:21
2.6 抓取工具
網頁抓取(Web Scraping,也稱為網絡數據提取或網頁爬取)是指從Web頁面上獲取數 據,并將獲取到的非結構化數據轉化為結構化的數據,最終可以將數據存儲到本地計算機或數據庫的一種技術。

圖2.14 山東省環境保護廳的依申請公開流程表
網頁抓取可以通過抓取軟件實現,也可以自己編寫代碼完成個性化網頁數據抓取(如Python的Beautiful Soup庫,具體見2.7和2.8節)。常見的抓取工具非常多,如Dexi.io[27]、OutWit Hub[28]、Mozenda[29]等。本節選取兩個工具講解,分別是import.io和Octoparse。
import.io[30]是一個免費的在線網頁抓取軟件,可以從網站中抓取數據并整理成數據集,擁有很好的交互設計,使用起來非常簡單方便。Octoparse[31]是基于Windows操作系統的網頁抓取軟件,可以將非結構化或半結構化的數據從網站中抓取后,轉化為一個結構化的數據集,整個過程不需編碼。這對于不懂編程的人來說是非常有用的。
2.6.1 import.io工具
import.io是最好的數據抓取工具之一,界面非常簡單易用,不要求使用者編寫任何代碼即可自動識別網頁結構,抓取內容并生成表格供使用者下載,特別適合抓取內容多且格式統一的Web頁面。
例如,進入宜家中文主頁[32],在搜索框中輸入“椅子”,頁面[33]上的數據非常規整,圖片、相應文字解釋和鏈接排列整齊。這個頁面雖然不是以表格形式呈現,而是做成了圖文列表,但呈現出明顯的結構化數據,見圖2.15。也可以使用瀏覽器提供的“查看源代碼”功能查看右下角呈現多個椅子圖片的區域,該區域的HTML標記是<table>,說明所有的椅子圖片和相關文字以表格的方式展現在頁面上。若沒有任何HTML基礎,建議先閱讀本書第7章相關內容。

圖2.15 搜索宜家“椅子”頁面
該網站的數據通過復制和粘貼操作,無法被保存成一張清楚的表格。如果會寫代碼,可以編寫抓取程序自動抓取不同層級的頁面資料,否則需要通過一些現有的工具如import.io去抓取。
先登錄import.io網站[34],再申請賬號并登錄。單擊登錄頁面右上角的“New”按鈕,在新頁面的左側單擊“new Extractor”按鈕,輸入URL地址
http://www.ikea.com/cn/zh/search/?query=+椅子
(注意中文“椅子”可能顯示亂碼效果),見圖2.16。抓取的結果見圖2.17,因為篇幅的關系,僅截取了前5條記錄。

圖2.16 輸入URL地址

圖2.17 抓取的數據
單擊右上角的“Save”,再選擇“Save and Run”,運行后的效果見圖2.18,可以下載為JSON或CSV格式的可機讀數據。

圖2.18 下載頁面
import.io也會在執行完成后給用戶發送一條提醒郵件,也可以在郵件包含的鏈接中下載數據,見圖2.19。
也可以單擊圖2.20的“Start Magic”,在窗口中輸入URL地址,見圖2.21。單擊右下角的“Download CSV”按鈕,下載抓取的數據,在彈出的圖2.22中設置抓取的頁數。

圖2.19 郵件鏈接下載

圖2.20 “Start Magic”模式

圖2.21 “Start Magic”模式抓取數據

圖2.22 設置抓取的頁數
注意,若下載的CSV文件存在亂碼,可以使用OpenRefine等軟件清理,或者使用第3章介紹的方法完成數據清洗。
2.6.2 Octoparse工具
Octoparse(八爪魚)采集器是一個功能強大且易用的互聯網數據采集平臺,可以簡單、快速地將網頁數據轉化為結構化數據,存儲為Excel或其他數據庫,并且提供基于云計算的大數據云采集解決方案,實現精準、高效、大規模的數據采集。八爪魚采集器提供多種操作模式,可以滿足不同用戶的個性化需求。
Octoparse采集器不僅操作簡單、功能齊全,還能短時間內獲取大量數據,是深圳視界數據技術有限公司自主研發的大數據采集平臺。2016年3月,Octoparse海外版在洛杉磯上線了,特別適合批量下載多個Web頁面的數據,快速下載頁面list/table元素,但不適合批量下載圖片。
Octoparse采集器英文版本的下載地址是http://www.octoparse.com/download,中文版本的下載地址是http://www.bazhuayu.com/download,支持的操作系統版本是Windows XP/7/8/10。其中文版雖然是免費的,但需要積分才能導出下載的數據,積分可以通過微信簽到或向好友推薦該軟件獲取,免費版最多10個任務。
Octoparse采集器需要Microsoft.NET Framework3.5Service Pack1[35]的支持,操作系統Windows7/8/10已經內置,不需下載,但Windows XP需要手動提前安裝,可到微軟官方網站[36]下載,也可以到八爪魚官方網站提供的鏡像[37]下載,文件大小是231.5MB。
建議使用Octoparse6.0或更高的版本,本節使用的版本是Octoparse6.2,其英文版本下載后為OctoparseV6.2Setup.zip文件。安裝后,需要賬號注冊和郵箱激活,見圖2.23。

圖2.23 Octoparse賬號注冊
首次運行Octoparse需要登錄,見圖2.24。勾選“Remember Me”可以免去每次輸入賬號和密碼的麻煩,勾選“Auto Login”實現賬號自動登錄。在公共機房中不建議勾選這兩項。

圖2.24 Octoparse賬號登錄
八爪魚采集器主界面見圖2.25,主界面分為三部分,有三種采集模式,即頂部左上角的控件、左側的任務欄和右側的Home主頁。

圖2.25 Octoparse主界面
頂部左上角包含6個圖標,見圖2.26。第一個是“Octoparse圖標”。第二個是“User center”(個人中心),可以連接到網站的個人中心頁面,查看個人的使用數據和任務管理。第三個是“XPath Tool”(XPath工具),主要是高級用戶在網頁中對數據進行定位時使用。第四個是“RegEx Tool”(正則表達式工具),主要用于生成一條正則表達式,匹配相應的字符串數據。與“格式化數據”中的正則匹配、正則替換有聯系。第五個是“Export Scheduler”(導出計劃),設置了“自動導出到數據庫”后,相應的導出計劃會出現在該窗口。第五個是“About”(關于),包含軟件當前版本數據、聲明,以及軟件的檢測更新。
左側的任務欄包含3部分:My Task(我的任務)、Quick Start(快速開始)和Task Status(任務狀態)。My Task顯示已經創建的各任務組及任務組中的多個任務。Quick Start主要包含任務的創建和導入導出。Task Status可以查看各狀態中的任務情況。右側Home主頁的3種采集模式包括Smart Mode(智能模式)、Wizard Mode(向導模式)和Advanced Mode(高級模式)。下面通過實際案例來介紹這三種模式。

圖2.26 Octoparse頂部左上角的圖標
1.Smart Mode
Smart Mode是八爪魚最便捷的采集模式,輸入網址后可直接將網頁中的數據以表格的形式采集下來,并且支持字段數據的刪除、修改、翻頁、數據的導出等。Smart Mode目前只能采集包含列表或表格數據的網頁,即網頁源代碼中的<list><table>部分。
【案例2-1】以Web頁面https://movie.douban.com/top250為例,使用Smart Mode抓取該頁面的前25部電影的數據。
<1> 在右側Home主頁頂部輸入該URL,再單擊“Smart”按鈕,Octoparse采集器會新生成一個Smart標簽頁(注意Home主頁頂部的顯示內容)。Octoparse采集器抓取數據需要一些時間,本案例抓取的數據少,需要的時間也少,抓取的效果見圖2.27。

圖2.27 Smart Mode
<2> 編輯數據。如右擊列頭“pic_link”,在出現的快捷鍵菜單中選擇“Delete”,刪除該列。右擊列頭“hd”,在出現的快捷鍵菜單中選擇“Modify”(見圖2.28),修改列頭為“name”。注意,列頭只能由字母、數字、下劃線和中文漢字組成,不能以數字開頭。

圖2.28 Smart Mode
<3> 導出數據。單擊頁面右下角的“Export to Excel”按鈕,選擇保存的位置和文件名,單擊“保存”按鈕,即可將抓取的數據保存到本地,默認為Excel文件格式。
2.Wizard Mode
Wizard Mode(向導模式)適合初學者使用,根據操作引導設置后就可以采集數據。Wizard Mode包含4種:Single Page(單網頁采集)、List or Table(列表或表格采集)、List and Detail(列表及詳情頁采集)、List of URLs(URL列表采集)。單擊圖2.29中的某種類型,進入學習界面。

圖2.29 Wizard Mode
單擊“Start”按鈕,進入采集類型選擇,或者單擊“Home”頁面左下角的“Quick Start”后,選擇“New Task(Wizard Mode)”,見圖2.30,出現的Single Page采集只在一個特定的網頁上抓取數據,即采集工作只涉及單個頁面的數據。
【案例2-2】用Single Page采集京東幫助頁面。
<1> 在“Home”頁面單擊“Start”按鈕,再選擇“Single Page Extract”,見圖2.31。

圖2.30 Quick Start

圖2.31 Single Page采集
<2> 定義任務。定義任務的名字、分類和備注數據。任務名和分類有助于以后查找,任務名稱對符號、數字等格式沒有限制。備注可以記錄該任務的重點數據,也可以理解為任務注釋,見圖2.32。然后單擊“Next”按鈕。

圖2.32 案例2-2的任務定義
<3> 輸入URL地址http://help.jd.com/user/issue/291-548.html,見圖2.33,再單擊“Next”按鈕。

圖2.33 案例2-2的URL輸入
<4> 定義字段。圖2.34包含上下兩部分,下部分顯示第三步URL頁面的內容,可以從中單擊選擇需要抓取的字段,每次選擇會在上部分顯示生成一個新字段。單擊“Add Predefined Fields”,添加當前網頁URL、網頁標題和當前時間等預定義字段,見圖2.35。然后單擊“Next”按鈕。

圖2.34 案例2-2的定義字段

圖2.35 案例2-2的添加預定義字段
<5> 運行任務抓取數據。單擊“Run Task”下的“Local Extraction”(見圖2.36),將任務在本地計算機上運行。運行需要一些時間。

圖2.36 案例2-2的運行任務
<6> 導出數據。單擊右下角的“Export data”按鈕,在出現的菜單中選擇導出的數據類型(見圖2.37),選擇導出數據文件的位置后,即可導出數據。
List or Table采集包含列表和表格兩種,見圖2.38。

圖2.37 案例2-2的數據導出

圖2.38 List or Table采集
列表形式是采集的數據呈現類似系列結構的數據時(如京東商城的商品數據)需要采用的形式,其網頁源代碼通常是<ul>或<ol>,分別代表無序和有序列表。表格形式是列表形式的一個特例,類似常見的Excel表格,數據排列規整。其網頁源代碼通常是<table>。
【案例2-3】使用“List or Table”采集列表頁面。注意案例1僅抓取了第一頁的25部影片的數據,本案例可以設置抓取的頁數,即可以抓取更多部,直至250部影片數據。
<1> 在“Home”頁面單擊“Start”按鈕,選擇“List or Table Extract”(同案例2-2)。
<2> 定義任務(同案例2-2)。
<3> 輸入URL地址https://movie.douban.com/top250,單擊“Next”按鈕(同案例2-2)。
<4> 定義列表。圖2.39下部分顯示第三步URL頁面的內容。選擇第一部電影的全部數據,注意,數據四周的點劃線邊框。上部分顯示選擇的第1條列表數據。然后再選擇第二部電影的全部數據,則上部分自動顯示了全部25條列表數據,見圖2.40。如果列表不符合自己的要求可以單擊“Clear List”按鈕刪除列表后重新操作,單擊“Next”按鈕。
<5> 定義字段。列表包含多個字段,從中選擇需要抓取的字段,如序號、電影名、導演主演、評分和評價人數等數據,見圖2.41,單擊“Next”按鈕。

圖2.39 案例2-3的定義列表1

圖2.40 案例2-3的定義列表2

圖2.41 案例2-3的定義字段
<6> 定義分頁。本案例的250部電影分10頁顯示,所以選擇“Enable pagination”,然后單擊頁面下部的“后頁”,在頁面上部可以看到分頁鏈接已經設置好,見圖2.42。設置“Implement pagination”為“5”,表示抓取前5頁,即125部電影的數據。單擊“Next”按鈕。

圖2.42 案例2-3的定義分頁
<7> 運行任務抓取數據。單擊“Run Task”下的“Local Extraction”,將任務在本地計算機上運行。
<8> 導出數據。單擊右下角的“Export data”按鈕,選擇導出數據類型和數據文件的位置后,即可導出數據(同案例2-2)。
【案例2-4】用List or Table采集表格頁面。
登錄京東頁面www.jd.com,在搜索框中輸入“椅子”,結果是一個典型的表格效果。步驟同案例3,此處不再贅述,見圖2.43。

圖2.43 案例2-4的定義列表
List and Detail采集是從一個列表數據頁面進入到每個列子項的詳情數據頁面,然后采集詳情頁面的數據,見圖2.44。

圖2.44 List and Detail采集
【案例2-5】用List and Detail采集二級頁面的數據。
登錄頁面https://movie.douban.com/top250,單擊某部電影的名字,進入其二級頁面,如https://movie.douban.com/subject/1292052/,然后抓取二級頁面的數據。
<1> 在“Home”頁面單擊“Start”,選擇“List and Detail Extract”。單擊“Next”按鈕(同案例2-2)。
<2> 定義任務(同案例2-2)。
<3> 輸入URL地址(同案例2-2)。
<4> 定義列表。在圖2.45的下部分單擊第一個鏈接,即第一部電影的名字,該鏈接被插入到圖2.45的上部分,同樣單擊第二個鏈接,則自動將首頁的25個鏈接插入到圖2.45的上部分。單擊“Next”按鈕。

圖2.45 案例2-5的定義列表
<5> 定義分頁,見圖2.46(同案例2-3)。

圖2.46 案例2-5的定義分頁
<6> 定義字段。在二級頁面中選擇需要抓取的字段,見圖2.47(同案例2-3)。

圖2.47 案例2-5的定義字段
<7> 運行任務抓取數據。由于每個頁面均要打開二級頁面,因此任務運行時間較長(同案例2-2)。
<8> 導出數據(同案例2-2)。
3.Advanced Mode
Advanced Mode(高級模式)是一種進階模式,雖然功能強大,但是需要一定的HTML基礎才能掌握(詳見本書第7章)。本書略過此種模式,若有需要,讀者可以去官方網站的教程中心[38]學習。
- 企業數字化創新引擎:企業級PaaS平臺HZERO
- Hands-On Data Structures and Algorithms with Rust
- 云計算環境下的信息資源集成與服務
- Creating Dynamic UIs with Android Fragments(Second Edition)
- 大話Oracle Grid:云時代的RAC
- 數據庫程序員面試筆試真題庫
- 從0到1:JavaScript 快速上手
- 深入淺出Greenplum分布式數據庫:原理、架構和代碼分析
- 達夢數據庫運維實戰
- 二進制分析實戰
- 數據庫與數據處理:Access 2010實現
- 計算機視覺
- 機器學習:實用案例解析
- Gideros Mobile Game Development
- Access數據庫開發從入門到精通