對於程式設計師來說基本上不存在重複性的工作,任何重複勞動都可以透過程式自動解決。下面千鋒帶你一起了解爬蟲需要哪些相關的技能。
1、基本的編碼基礎(至少一門程式語言)
這個對於任何程式設計工作來說都是必須的。基礎的資料結構你得會吧。資料名字和值得對應(字典),對一些url進行處理(列表)等等。事實上,掌握的越牢固越好,爬蟲並不是一個簡單的工作,也並不比其他工作對程式語言的要求更高。
熟悉你用的程式語言,熟悉相關的框架和庫永遠是百益無害。我主要用Python,用Java寫爬蟲的也有,理論上講任何語言都可以寫爬蟲的,不過最好選擇一門相關的庫多,開發迅速的語言。用C語言寫肯定是自找苦吃了。
2、任務佇列
當爬蟲任務很大的時候,寫一個程式跑下來是不合適的:
如果中間遇到錯誤停掉,重頭再來?這不科學
我怎麼知道程式在哪裡失敗了?任務和任務之間不應該相互影響
如果我有兩臺機器怎麼分工?
所以我們需要一種任務佇列,它的作用是:講計劃抓取的網頁都放到任務佇列裡面去。然後worker從佇列中拿出來一個一個執行,如果一個失敗,記錄一下,然後執行下一個。這樣,worker就可以一個接一個地執行下去。也增加了擴充套件性,幾億個任務放在佇列裡也沒問題,有需要可以增加worker,就像多一雙虧筷子吃飯一樣。
常用的任務佇列有kafka,beanstalkd,celery等。
3、資料庫
這個不用講了,資料儲存肯定要會資料庫的。不過有時候一些小資料也可以儲存成json或者csv等。我有時想抓一些圖片就直接按照資料夾儲存檔案。推薦使用NoSQL的資料庫,比如mongodb,因為爬蟲抓到的資料一般是都欄位-值得對應,有些欄位有的網站有有的網站沒有,mongo在這方面比較靈活,況且爬蟲爬到的資料關係非常非常弱,很少會用到表與表的關係。
4、HTTP知識
HTTP知識是必備技能。因為要爬的是網頁,所以必須要了解網頁。首先html文件的解析方法要懂,比如子節點父節點,屬性這些。我們看到的網頁是五彩斑斕的,只不過是被瀏覽器處理了而已,原始的網頁是由很多標籤組成的。處理最好使用html的解析器,如果自己用正則匹配的話坑會很多。
5、運維
這個話題要說的有很多,實際工作中運維和開發的時間差不多甚至更多一些。維護已經在工作的爬蟲是一個繁重的工作。隨著工作時間增加,一般我們都會學著讓寫出來的爬蟲更好維護一些。
比如爬蟲的日誌系統,資料量的統計等。將爬蟲工程師和運維分開也不太合理,因為如果一個爬蟲不工作了,那原因可能是要抓的網頁更新了結構,也有可能出現在系統上,也有可能是當初開發爬蟲的時候沒發現反扒策略,上線之後出問題了,也可能是對方網站發現了你是爬蟲把你封殺了,所以一般來說開發爬蟲要兼顧運維。
對於程式設計師來說基本上不存在重複性的工作,任何重複勞動都可以透過程式自動解決。下面千鋒帶你一起了解爬蟲需要哪些相關的技能。
1、基本的編碼基礎(至少一門程式語言)
這個對於任何程式設計工作來說都是必須的。基礎的資料結構你得會吧。資料名字和值得對應(字典),對一些url進行處理(列表)等等。事實上,掌握的越牢固越好,爬蟲並不是一個簡單的工作,也並不比其他工作對程式語言的要求更高。
熟悉你用的程式語言,熟悉相關的框架和庫永遠是百益無害。我主要用Python,用Java寫爬蟲的也有,理論上講任何語言都可以寫爬蟲的,不過最好選擇一門相關的庫多,開發迅速的語言。用C語言寫肯定是自找苦吃了。
2、任務佇列
當爬蟲任務很大的時候,寫一個程式跑下來是不合適的:
如果中間遇到錯誤停掉,重頭再來?這不科學
我怎麼知道程式在哪裡失敗了?任務和任務之間不應該相互影響
如果我有兩臺機器怎麼分工?
所以我們需要一種任務佇列,它的作用是:講計劃抓取的網頁都放到任務佇列裡面去。然後worker從佇列中拿出來一個一個執行,如果一個失敗,記錄一下,然後執行下一個。這樣,worker就可以一個接一個地執行下去。也增加了擴充套件性,幾億個任務放在佇列裡也沒問題,有需要可以增加worker,就像多一雙虧筷子吃飯一樣。
常用的任務佇列有kafka,beanstalkd,celery等。
3、資料庫
這個不用講了,資料儲存肯定要會資料庫的。不過有時候一些小資料也可以儲存成json或者csv等。我有時想抓一些圖片就直接按照資料夾儲存檔案。推薦使用NoSQL的資料庫,比如mongodb,因為爬蟲抓到的資料一般是都欄位-值得對應,有些欄位有的網站有有的網站沒有,mongo在這方面比較靈活,況且爬蟲爬到的資料關係非常非常弱,很少會用到表與表的關係。
4、HTTP知識
HTTP知識是必備技能。因為要爬的是網頁,所以必須要了解網頁。首先html文件的解析方法要懂,比如子節點父節點,屬性這些。我們看到的網頁是五彩斑斕的,只不過是被瀏覽器處理了而已,原始的網頁是由很多標籤組成的。處理最好使用html的解析器,如果自己用正則匹配的話坑會很多。
5、運維
這個話題要說的有很多,實際工作中運維和開發的時間差不多甚至更多一些。維護已經在工作的爬蟲是一個繁重的工作。隨著工作時間增加,一般我們都會學著讓寫出來的爬蟲更好維護一些。
比如爬蟲的日誌系統,資料量的統計等。將爬蟲工程師和運維分開也不太合理,因為如果一個爬蟲不工作了,那原因可能是要抓的網頁更新了結構,也有可能出現在系統上,也有可能是當初開發爬蟲的時候沒發現反扒策略,上線之後出問題了,也可能是對方網站發現了你是爬蟲把你封殺了,所以一般來說開發爬蟲要兼顧運維。