2018-11-17 09:58
近年來, 大數據技術廣泛受到各行各業的關注, 其所帶來的影響, 正應用到金融、醫療、政務及制造業等各個領域, 改變著我們的生活。如何在互聯網信息平臺上快速把不規則、散亂分布的網頁信息準確挖掘出來, 爬蟲技術是一種很好的數據采集的手段, 也是搭建大數據架構體系的第一步。筆者結合自身的項目開發經驗, 介紹如何基于C#.Net網絡爬蟲技術實現海量網頁數據的抓取。
網絡爬蟲又稱網頁蜘蛛, 它是通過互聯網定向抓取相關的網頁資源, 獲取所需信息的程序或腳本。Python, Java和.Net等常見的語言都可以用于編寫網絡爬蟲, 這些編程語言各有優勢, 大家可以根據習慣選擇。編寫網絡爬蟲的主要流程是這樣的:首先通過Http客戶端模擬登錄并保存Cookies, 然后抓取Html頁面并對Html頁面解析獲取需要的數據, 最后將解析后的數據寫入數據庫。
筆者采用Http Web Request類和Http Web Response類來實現網絡爬蟲的編程。Http Web Request類主要利用Http協議和服務器交互, 通過GET和POST兩種方式來對數據進行獲取和提交;Http Web Response類則用于生成發送Http請求和接收Http響應。
某些網站需登錄后才能查看網頁信息, 同理在利用網絡爬蟲抓取數據前也需要模擬登陸網站, 獲取并保存能夠辨別用戶身份的Cookies信息。因此, 我們首先需使用抓包工具對登陸過程進行數據分析, 筆者選擇360瀏覽器自帶的開發者工具, 以國內某鋼材網站為例, 在抓包工具中對登陸過程進行跟蹤。圖1為網站登錄信息跟蹤頁面圖。通過抓包工具可以分析出登錄網站時其內部的執行過程、內部邏輯, 捕獲到Request的URL地址、通訊方式及通訊參數 (登錄方法、用戶名、密碼等) 等關鍵信息, 通過分析這些信息, 就可以通過爬蟲實現網站模擬登陸, 并保存爬蟲登陸狀態的Cookies。
圖2為網站模擬登陸流程。首先在編程端創建HttpWebRequest對象, 然后經過通訊方式設定、偽裝瀏覽器和參數錄入等操作, 最后向服務器提交模擬網站登錄方法, 并通過HttpWebResponse實例的返回值判斷模擬登錄是否成功。
網站模擬登陸成功后, 可進行下一步網頁數據抓取工作。網頁信息抓取的常見方法有兩種, 一種是先下載整個Html文件, 然后通過過濾、篩選等方式分析出信息數據;另一種是對Web行為進行Http分析, 把瀏覽器行為拆分為JS邏輯和Http行為, 該方法可實現對動態網頁數據的抓取。筆者比較傾向于采用后者。以國內某鋼材網站為例, 其螺紋鋼價格曲線圖如圖3所示, 用戶成功登陸該網站后, 可查看某一段時間內多個城市的螺紋鋼價格曲線圖。如果通過人工方式去手動收集這些網站的數據, 很明顯其效率低且準確性也不高, 但是通過爬蟲技術軟件就可以高效地實現這些數據的抓取。
1) 瀏覽器行為捕捉和分析。瀏覽器或者一般進程有任何通訊發生, 都可以通過抓包工具捕捉到具體的Http請求和響應。圖4為對某網站的螺紋鋼價格數據查詢行文圖。對螺紋鋼價格查詢行文進行跟蹤后, 可以分析出網頁行為、數據請求、響應場景和提交參數等信息。
2) 瀏覽器行為模擬。在捕捉和分析出瀏覽器行為后, 我們便可以通過.Net實現對瀏覽器行為的模擬, 獲取想要的數據信息。
首先, 定義一個參數字典, 把該方法需要提交的參數進行設定, 并用ASCII編碼將參數字典中的數據轉換成字節數組。代碼如下:
3) 數據清洗。獲取數據信息后, 還需根據信息的特征對服務端返回的結果進行分析, 再加上語義判斷規則選擇合適的數據清洗方法。常用的方法有正則表達式過濾和JSON字符串解析等, 本文例子中返回的結果是JSON字符串, 所以選擇JSON字符串解析的方法進行數據清洗, 結果如圖5所示。
以上是筆者基于C#.Net進行爬蟲技術開發的一些經驗。網絡爬蟲并不是用來攻擊網站和竊取后臺數據的技術, 而是一種用來獲取互聯網公開信息, 也就是獲取網頁前端顯示的數據信息的工具。
隨著大數據技術的發展, 網絡爬蟲技術為數據采集和信息抓取提供了全新的技術路徑。該技術作為獲得數據的主要途徑, 為互聯網海量數據的采集提供了支撐。它的應用不僅僅局限于網頁數據的采集上, 還可用于單點登陸、網絡輿情監控和搜索引擎網頁收錄等方面。