網絡爬蟲的基本原理
1、網絡爬蟲原理
網絡爬蟲指按照一定的規則(模擬人工登錄網頁的方式),自動抓取網絡上的程序。簡單的說,就是講你上網所看到頁面上的內容獲取下來,並進行存儲。網絡爬蟲的爬行策略分為深度優先和廣度優先。如下圖是深度優先的一種遍歷方式是A到B到D 到E 到C到 F(ABDECF)而寬度優先的遍歷方式ABCDEF 。
2、寫網絡爬蟲的原因
我將為什麽寫網絡爬蟲的原因總結為3點,分別是:
(1)互聯網中的數據量大,我們不能人工的去收集數據,這樣會很浪費時間與金錢。而爬蟲有個特點就是能批量、自動化的獲取和處理數據。本人寫過各大汽車論壇上的爬蟲以及大眾點評網,tripadvisor(國外網站)的爬蟲,爬取的數據已有幾千萬之多,可想你如果一條條去復制,到老死也完不成吧。
(2)爬蟲很酷。前段日子,看到有人利用爬到了騰訊3000萬QQ數據,包含(QQ號,昵稱,空間名稱,會員級別,頭像,最新一條說說內容,最新說說的發表時間,空間簡介,性別,生日,所在省份,城市,婚姻狀況)的詳細數據,並繪制了各種有趣的圖表。
(3)對於讀研、讀博,做數據挖掘、數據分析的人而言,沒有數據做實驗,是一件很蛋疼的事情。你可能每天在各種論壇問這個問那個要數據,是不是很煩呢。
3、網絡爬蟲的流程
簡單的網絡爬蟲,通過上述圖便可完成。首先是給定一個待爬取的URL隊列,然後通過抓包的方式,獲取數據的真實請求地址。接著采用httpclient模擬瀏覽器將相應的數據抓取下來(一般是html文件或者是json數據)。由於網頁中的內容很多,很復雜,很多內容並不是我們需要的,所以我們需要對其進行解析。針對html的解析很簡單,通過Jsoup(Dom解析工具)、正則表達式便可完成。針對Json數據的解析,這裏我建議一款快速解析工具fastjson(阿裏開源的一個工具)
4、網絡抓包
網絡抓包,(packet capture)就是將網絡傳輸發送與接收的數據包進行截獲、重發、編輯、轉存等操作,經常被用來進行數據截取等。在針對數據響應為Json或者需要針對需要用戶名、密碼登陸的網站,抓包顯得尤為重要,抓包也是編寫網絡爬蟲的第一步。
如圖為東方財富網,抓包的結果,可以看出真實響應地址:Request URL和上面網頁請求的地址並不相同,而我們再來看看響應的股票數據。響應的數據格式是JSON文件,在這裏我們可以看到,股票數據一共有61頁,其中當前頁的數據為data【Json數據】。
所以利用網絡抓包,是網絡爬蟲的第一步,其可以直觀的看到數據請求的真實地址,請求方式(post、get請求),數據的類型(html還是Json數據)
5、HTTP狀態碼說明
HTTP狀態碼(HTTP Status Code)是用以表示網頁服務器HTTP響應狀態的3位數字代碼。當我們打開一個網頁時,如果網頁能夠返回數據,也就是說影響成功了,一般狀態響應碼都是200。當然狀態響應碼,包括很多內容,下面列舉了,狀態響應碼,及其表示的含義,其中加錯的是在爬蟲中經常遇到的:
100:繼續 客戶端應當繼續發送請求。客戶端應當繼續發送請求的剩余部分,或者如果請求已經完成,忽略這個響應。
101: 轉換協議 在發送完這個響應最後的空行後,服務器將會切換到在Upgrade 消息頭中定義的那些協議。只有在切換新的協議更有好處的時候才應該采取類似措施。
102:繼續處理 由WebDAV(RFC 2518)擴展的狀態碼,代表處理將被繼續執行。
200
201:請求完成,結果是創建了新資源。新創建資源的URI可在響應的實體中得到 處理方式:爬蟲中不會遇到
202:請求被接受,但處理尚未完成 處理方式:阻塞等待
204:服務器端已經實現了請求,但是沒有返回新的信 息。如果客戶是用戶代理,則無須為此更新自身的文檔視圖。 處理方式:丟棄
300:該狀態碼不被HTTP/1.0的應用程序直接使用, 只是作為3XX類型回應的默認解釋。存在多個可用的被請求資源。 處理方式:若程序中能夠處理,則進行進一步處理,如果程序中不能處理,則丟棄
301:請求到的資源都會分配一個永久的URL,這樣就可以在將來通過該URL來訪問此資源 處理方式:重定向到分配的URL
302:請求到的資源在一個不同的URL處臨時保存 處理方式:重定向到臨時的URL
304:請求的資源未更新 處理方式:丟棄
400:非法請求 處理方式:丟棄
401:未授權 處理方式:丟棄
403:禁止 處理方式:丟棄
404:沒有找到 處理方式:丟棄
500:服務器內部錯誤 服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在服務器端的源代碼出現錯誤時出現。
501:服務器無法識別 服務器不支持當前請求所需要的某個功能。當服務器無法識別請求的方法,並且無法支持其對任何資源的請求。
502:錯誤網關 作為網關或者代理工作的服務器嘗試執行請求時,從上遊服務器接收到無效的響應。
503:服務出錯 由於臨時的服務器維護或者過載,服務器當前無法處理請求。這個狀況是臨時的,並且將在一段時間以後恢復。
網絡爬蟲的基本原理