如何用SHELL寫好網路爬蟲

來源:互聯網
上載者:User

標籤:shell   awk   sed   網路爬蟲   

       上周,老大壓下來任務,讓寫一個網路爬蟲,負責爬某一個行業網站的資料資訊。由於本人只會 shell 程式設計語言,其它程式設計語言從未涉獵,因此就只能硬著頭皮用 shell 去寫了。

       轉眼之前已經過去一周了,一切從無到有,經曆的坎坷無數,這裡我就不一一吐槽。

       這裡呢,我就簡單和大家分享下,我個人對,如何用 shell 去寫好網路爬蟲的幾點拙見,希望有想法的朋友聯絡我一起交流交流想法,沒有想法的就看看有精華就吸收走,有糟粕的果斷棄之。

       1、你肯定要簡單瞭解下網路爬蟲是什麼!這個定義在Google一搜一大堆,這裡我就不拷貝了。

       2、對HTTP協議要有簡單瞭解,比如HTTP協議1.0和1.1的區別、HTTP協議的請求過程、請求報文都包含哪些內容以及一個網頁連結是由哪些部分組成的。針對請求報文的內容,是我們網路爬蟲抓取的重點。如果你所要爬的網站需要登入使用者名稱和密碼,那麼cookie就非常重要;如果你所要爬的網站做了防盜鏈,那麼你就需要聲明好你是從哪個串連來的,此時referer就非常的重要;如果你所要爬的網站需要傳遞POST資訊,那麼你就要對Form Data和Response比較關注才行,等等,這裡僅列舉幾個重要的點。

       3、上面提到了HTTP協議的相關,那麼如何把這些資訊告知給我們所要爬的目標網站呢?通常我們都是使用遊覽器做操作的,可是我們現在定義為網路爬蟲了,那肯定要脫離人工嘍。因此這裡我們就要使用到2個命令工具,一個是curl,一個是wget。我個人習慣,對頁面內容請求我就使用curl了,對於某些資源下載,比片,音頻等,我就使用wget去做操作。針對這兩個命令,我們所需要重視的是,如何傳遞cookie,如何傳遞referer,如何傳遞POST資訊以及如何設定代理資訊等這些內容。這裡我以curl命令為例,如果我需要傳遞cookie,那麼我就需要用到-b(--cookie)去傳遞cookie,使用-s(--slient)減少curl頁面過程中是不必要的輸出資訊,使用-e(--referer) 指定從哪個url地址來等等等等,這裡不再一一囉嗦。針對curl和wget的命令詳解,Google一搜一大把,這裡同樣不再拷貝了。

       有以上的知識,就具備了通過命令請求所爬的網站頁面資訊了,後面所涉及到的就是對所爬資訊的篩選、過濾了,以及如何提高爬的速度。

       1、針對資料的篩選、過濾,shell真是太在行了。這一點,我相信大家肯定都清楚。shell編程中常用的文本處理工具,比如grep、sed、awk這三個主要的,以及周邊的cut、wc、uniq、sort等等。我們通過將這些工具與Regex做結合,可以完美實現對於感興趣資訊選取。針對以上幾個工具的用法,不在本篇做敘述。

       2、針對網路爬蟲這個整體指令碼的構建,這個就需要你的shell編程經驗越熟練越好了,因為這個主要對shell指令碼整體架構的組建以及各個邏輯之間的組合關聯的把握和感知。如果這個地方處理不好,指令碼的效率不僅不會高,出錯的排障也是不容易的。

       3、針對基於shell的網路爬蟲的速度最佳化,這個還是蠻受上一個點的情況影響了。如果要最佳化速度,一方面要減少不必要的命令使用,這樣能減少磁碟的IO消耗和CPU的效能計算,另一方面我們需要使用 shell 的多線程功能,來提高指令碼整體的並發性。

       OK!以上就是我對基於shell的網路爬蟲個人拙見。下面再補充幾點最佳化思路!

       1、爬前要分析所耙梳站的地區,比如國內還是國外。如果是國外的,就盡量選擇國外的伺服器(你懂得)不然速度可能讓你汗顏!另外,本地綁定所耙梳站的固定IP或者選擇一個好的DNS伺服器也是不錯的選擇。

       2、在使用shell的多線程功能時,切記要控制住進程數。這個數值要綜合考量,一方面要以自身伺服器效能為參考依據,另一方面要以所爬網站的承載能力為參考依據,兩者缺一不可。一個和諧的數值是需要多次測試求出來的,切記!

       3、為了提高爬蟲後期的擴充性,因此架構和變數,這兩者一定要靈活,不然指令碼就是個死指令碼,不方便後期的擴充。          

       雖然shell確實是一個面向過程的程式設計語言,但是我還是期望能夠站在更高的角度去靈活運用它。最後,我個人絕對針對網路爬蟲這種東西,使用進階語言比如java、python去寫效果應該更好。目前個人,不會進階語言,所以只能用 shell 語言去寫,淚奔啊!

       在下一篇博文,我會分享我的爬蟲指令碼給大家,希望能對大家有所協助!


本文出自 “Not Only Linux” 部落格,請務必保留此出處http://nolinux.blog.51cto.com/4824967/1550976

如何用SHELL寫好網路爬蟲

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.