如何用SHELL寫好網絡爬蟲

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1550976

       上周,老大壓下來任務,讓寫一個網絡爬蟲,負責爬某一個行業網站的數據信息。由于本人只會 shell 編程語言,其它編程語言從未涉獵,因此就只能硬著頭皮用 shell 去寫了。

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

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

       1、你肯定要簡單了解下網絡爬蟲是什么!這個定義在谷歌一搜一大堆,這里我就不拷貝了。

       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的命令詳解,谷歌一搜一大把,這里同樣不再拷貝了。

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

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

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

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

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

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

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

       3、為了提高爬蟲后期的擴展性,因此框架和變量,這兩者一定要靈活,不然腳本就是個死腳本,不方便后期的擴展。          

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

       在下一篇博文,我會分享我的爬蟲腳本給大家,希望能對大家有所幫助!

轉自:http://nolinux.blog.51cto.com/4824967/1550976

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/1947

(0)
s19930811s19930811
上一篇 2016-08-15
下一篇 2016-08-15

相關推薦

  • 用戶和組相關配置文件

    1. /etc/passwd文件詳解 輸入vi /etc/passwd 可以查看此文件的內容 [root@localhost ~]# vi /etc/passwdroot:x:0:0:root:/root:/bin/bash root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/…

    Linux干貨 2016-10-23
  • shell-變量

    bash中變量的種類 ?根據變量的生效范圍等標準:     本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效     環境變量:生效范圍為當前shell進程及其子進程    …

    Linux干貨 2016-08-21
  • LVM

       本節主要為raid和LVM相關 一、作業 1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項 2、寫一個腳本,完成如下功能: (1) 列出當前系統識別到的所有磁盤設備 (2) 如磁盤數量為1,則顯示其空間使用信息 …

    Linux干貨 2016-08-30
  • ps/top/htop/dstat命令的使用說明

    ps命令參數說明       ps命令是一種靜態顯示進程(process)狀態的外部命令,獲取的是某一個時間點的狀態信息,其常用選項參數如下:         -A:all process信息    …

    Linux干貨 2016-12-16
  • 多方面修復linux系統

    在這篇文章,您將看到以下方面的修復方法: ●內核文件和虛擬 ●grub.conf ●grub目錄 ●boot分區 ●fstab文件 ●root密碼破解   首先,要想很愉快的修復linux啟動的各種問題,就必然要把linux的啟動流程搞清楚。 1. 加載 BIOS 的硬件信息和進行自我測試,并依據設定取得第一個可開機的裝置; 2. 讀取并執行第一個…

    Linux干貨 2016-09-13
  • 學習宣言

    此刻打盹,你將做夢,此刻學習,你將圓夢! 為了財富自由,前進!

    Linux干貨 2016-12-28
欧美性久久久久