桂林電子科技大學 李 彥
本文介紹了Python技術的網絡爬蟲系統的特點和工作原理,對網絡爬蟲的應用邏輯做了詳細的介紹,同時,通過對爬蟲技術、數據分析在旅游行業的應用的研究,亦為爬蟲技術、數據分析在其他行業如商務、醫學、教育、科學與工程等各個方面的應用提供有價值的應用參考。
網絡爬蟲(Crawler)作為一種古老的網絡技術,它伴隨著大數據與人工智能時代的來臨而受到越來越多人的重視與青睞。具有足夠豐富的功能的Python在網絡爬蟲技術中脫穎而出。在日常的工作中,給予了強大的數據信息支持技,解決了企業信息采集、市場數據分析、信息自動匹配等問題。通俗的講爬蟲就是把你手動打開窗口、輸入數據等等操作用程序代替。用程序替你獲取你想要的信息。爬蟲的關鍵是:“匹配”“采集”“自動化”。
話說是因為有了web才有了爬蟲,目前市面上的爬蟲技術應用都是圍繞著web網頁進行的。
現實生活中很多網絡信息檢索、存儲之中都會通過網絡爬蟲技術來實現網頁中數據爬取、分析和采集。比如人們在生活場景中常用到搜索引擎進行信息查閱,包括谷歌、百度、搜狗的等,都運用到了搜索技術;網絡購物、互聯網電商平臺、線上旅游OTA平臺等,要用到爬蟲技術獲取自身想要的網絡數據信息從而實現數據分析的需求的場景,該技術得到了廣泛的應用。
Python語言是高級語言,由Guido van Russum在阿姆斯特丹于1989年的圣誕節期間首次被設計完成,1991年第一次公開發行文本。它是一種解釋性語言,你可以用它來創建網頁應用、游戲和搜索引擎。多個領域都會見到Python的身影,如:云計算、web開發、科學運算、人工智能、金融量化交易等。同時,該語言具有獨特的語法結構,擁有較強的可讀性,具備互交性、結構簡單、代碼清晰、可移植、源代碼已維護、可嵌入以及可拓展等特點,適合完成高層人物,幾乎可以再所有操作系統中運行。若要使用Python語言來實現網絡爬蟲技術,應當充分利用Python語言簡潔以及資源豐富的優勢。如在研發網絡爬蟲系統的獲取網絡數據信息時,無需較為復雜的代碼編輯器、調試器等工具,可使用Eclipse通過插件作為Python語言的開發工具。
軟件質量高。秉承了簡潔、清晰的特點,擁有高度一致的編程模式,簡單易學,容易上手。設計風格從始至終不做改變,可保證開發者在統一規則內設計出規范性的代碼。如若出現錯誤代碼,Python提供了合理的“退出機制”。
開發速度快。Python不需要復雜的IDE,它可以簡單到只用一個文本編輯器,對多數中小型應用進行開發。無需編譯也無需調試,往往只需要幾十行代碼就可以開發出需要幾百行C代碼才能實現的功能。
功能強大。為了實現更多的功能,Python內置了許多預編碼的庫工具。ScraPy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。可運用到信息搜索、數據識別、存儲歷史數據等一系列程序中。同時,Python還有很多強大的框架幫助編程者實現更多功能。例如:TruboGears、Django、Pylons等。
易于擴展。可通過C或者C++編寫的模塊進行拓展,也十分擅長做文本處理和字符串處理。
通過獲取網絡數據的方式有兩種:
方式1:發出請求--->匹配網頁代碼--->解析成頁面。
方式2:模擬瀏覽器發送請求(獲取網頁代碼)->提取有用的數據->存放于數據庫或文件中。
爬蟲要做的就是方式2;
爬蟲主要步驟:
(1)分析目標網站,明晰目標網站結構,理清關鍵數據位置。(2)發起請求:使用http庫或瀏覽器模擬工具向目標站點發起請求,即發送一個Request。(3)獲取響應內容。如果得到了一個Response,Response包含:html,json,圖片,視頻等。說明瀏覽器能正常響應。(4)解析內容:解析html數據:正則表達式(RE模塊),第三方解析庫如Beautifulsoup,lxml等。解析json數據:json模塊;通過解析html、json或其他數據,獲得想要的關鍵數據信息,或者是下一個待爬取的URL地址。(5)保存數據。雖然網絡爬蟲可以方便地為人們獲取感性區的信息數據,但在進行網絡爬蟲時,亦應了解網絡爬蟲引發的問題。
網絡爬蟲的“性能”騷擾:
web默認接受人類訪問,由于網絡爬蟲的頻繁訪問會給服務器帶來巨大的額資源開銷。
網絡爬蟲的法律風險:
服務器上的數據有產權歸屬,網絡爬蟲獲取數據牟利將帶來法律風險。
網絡爬蟲的隱私泄露:
網絡爬蟲可能具備突破簡單控制訪問的能力,獲取被保護的數據從而泄露個人隱私。
頁面請求:
網絡爬蟲的第一個實現步驟就是模擬瀏覽器向目標網站的服務器發送請求,以獲得頁面的響應數據。
目標網站的web可分為動態頁面和靜態頁面兩種,二者是存在區別的。
在靜態頁面程序里,客戶端通過網絡,將web瀏覽器鏈接在服務器上,利用HTTP協議發起一個與需求一致的請求,將需求準確的告知服務區,web服務器接到請求后,服務器將會根據接收到的需求信息,從文件系統(存放了所有靜態頁面的磁盤)取出內容。之后通過web服務器返回給客戶端,客戶端接收到內容之后經過瀏覽器渲染解析,得到顯示的效果。為了讓靜態web頁面顯示更加好看,使用javascript/VBScript/ajax.但是這些特效都是在客戶端上借助于瀏覽器展現給用戶的,所以在服務器上本身并沒有任何的變化。
靜態頁web的缺點是:因JS的大量使用,瀏覽器頁面必須打開,大量的內存被占用,雖然減輕了服務端的壓力,但客戶端的壓力加重了。
動態web的不同之處在于所有的請求會先經過一個WEB Server來處理,雖然程序仍舊會用客戶端和服務端,但可以通過網絡連接到服務器上,使用HTTP協議發起請求,一定程度上減輕了服務端與客戶端的壓力。
針對不同頁面Python語言有相應的方便簡單的頁面獲取庫,例如requests庫及Selenium庫,而對于比較大型的網站,則可以使用scryapy開源架構。
旅游電商數據采集應用場景為例,基于爬蟲的一日游與多日游數據分析系統需要實現以下功能:
數據爬取功能:實現從主流旅游信息平臺爬取多區域多省份的一日游/多日游項目的產品信息,信息內容包括地點名稱,價格區間,店鋪名稱,產品銷量,產品具體行程,用戶評分。爬取過程應實現自動化的入口網址記錄,產品詳情頁巡游,停止條件判斷,關鍵信息定位及提取、異常處理及容錯。
數據清洗功能:包括處理缺失數據、添加默認值、刪除不完整的行、刪除不完整的列、規范化數據類型、必要的轉換、重命名列名等。例如對于一日游與多日游源數據中的行程信息,需要對其進行二次轉換,將行程數據中的地點名稱進行分割。
數據存儲功能:實現對已清洗數據的格式化、持久化存儲存儲,考慮到系統的穩定性及對后續業務的支持,系統存儲的方式包括文本文件存儲、關系型數據庫存儲。
數據呈現功能:將分析結果以直觀、清晰的可視化圖像呈現給使用者。
交互功能:實現使用者與系統的交互,如對一日游與多日游數據種類的選擇,地區數據的選擇等。以馬蜂窩網站獲取一日游數據為例,整個系統的業務邏輯為:數據爬取--數據清洗--數據存儲--數據分析--分析結果可視化。因此,整個系統將劃分為以下多個模塊來實現,如圖1所示紅色虛線內所示。

圖1 系統架構圖
系統爬取馬蜂窩所有目的地的區域編碼思路如下:
(1)向馬蜂窩目的地首頁'https://www.mafengwo.cn/mdd/'發送請求,獲取頁面響應html源碼。
(2)在響應的頁面html源碼中,找到class屬性為'hot-list clearfix'的
(3)在class屬性為'hot-list clearfix'的
(4)在所有
(5)保存所有地區代碼。
結束語:本文深入研究網路爬蟲技術,深入理解網絡爬蟲的概念、運行機制、實現邏輯、技術難點等各個方面。滿足不同的用戶在不同場景下對數據信息的采集需求。編程者可通過自己在網絡上搜索、分析轉換為自己所需的數據,爬蟲讓互聯網信息的世界變得簡單化和清晰化。爬蟲強大的文本處理庫和網絡支持庫,可以加速實現互聯網數據信息的整理,提高數據使用者的工作效率,在互聯網經濟中占據著不可忽視的地位。