寫爬蟲很簡單但也很難(附某美女站爬蟲源碼)

寫作上,我真是個很隨性的人,挖再多的坑都不一定會去補上,反正讀者也沒一直催...正因為隨性,我才說過曾經寫的那本書的經歷實在是痛苦,雖然寫完後給我帶來的好處還是很多的。也是因為隨性,將公眾號沉靜了個把月,發神經去寫博客 evilcos.me,一寫還寫了好幾篇。博客上主要還是技術,這是本,改不了。而公眾號,技術點談太深就不行了,更多還是科普及觀點相關的文字。

我的讀者們,尤其是收聽這麼久我公眾號(包括本知乎專欄)的讀者們,你們估計已經習慣我這樣的風格了,那請繼續保持習慣...你以為「懶人在思考」這個名字是怎麼來的,就是因為懶,說好聽點是「隨性」:D

回歸正題,我填下坑。

前兩篇文章大家可以溫習下:新人上手 Python 另類建議——被和諧了的答案爬蟲 Tip 相關與不相關的幾點補充

為什麼說寫爬蟲很簡單,你看源碼:github.com/evilcos/craw

如果你按我前兩篇文章說的,基於 Scrapy 寫爬蟲,那麼我開源的這個小爬蟲你可以直接參考:crawl3 目錄下可以翻到 rosi.py,專門爬 rosioo.com 這個站的美女圖片。這樣運行:

1. 按照官方文檔安裝 Scrapydoc.scrapy.org/en/1.2/i

2. git clone github.com/evilcos/craw

3. 創建個 /data/rosi/ 目錄,用於保存下載的圖片,當然這個路徑可以在 settings.py 里修改

4. 進入 crawl3 目錄,運行命令:scrapy crawl rosi

5. 沒了

這份代碼確實很少,也很簡單且粗暴,但我估計能真的領悟深刻的人會很少。

我交代下我的爬蟲生涯吧,2008年開始就寫爬蟲到現在,過程也發現了 Scrapy 等爬蟲框架,但那時都太初始了,哪有現在用得這樣爽?而我因為後來負責公司的漏洞掃描器引擎的編寫,爬蟲是我最費力寫出來的,從零踏了無數坑,fix 了無數 bugs。回頭看看 N 年前自己寫的大爬蟲,複雜到我想吐,估計後來那些參與維護我寫的那個大爬蟲的同學會恨死我...其實這不完全怪我呀,爬蟲本就是個非常複雜的玩意,因為其面對的 Web 環境複雜度太高,我隨便羅列些必定會踏到的坑吧:

字符集編碼

HTML/XML不規範

鏈接偽協議及不規範

各種文件類型

網頁跳轉:服務端、客戶端(Meta、JavaScript、Flash等)

Cookie/認證會話維護

代理維護

GPC(Cookie/Post/Get)參數提取

HTTP多種請求

超時:連接超時/讀取超時

JavaScript動態出來的鏈接

AJAX請求

鏈接爬取去重演算法

廣度深度演算法

並發:進程/線程/協程

調度:同步/非同步

各種內存優化

各種異常維護

靈活配置

靈活擴展

優秀的文檔...

我可以肯定是我現在由於趕時間,並沒都羅列全面。經歷過這些的人才會感慨:工程化能力的重要性啊...

你看,我上面開源的那個 Scrapy 小爬蟲是多麼的簡單,然而,我強烈建議:

當你在享受這種快感的時候,去深度理解理解下,這種快感的由來吧。

我願意花錢去贊助一些優秀開源甚至花高價錢去買一些優秀工具,雖然我沒錢。促使我這樣做,以及不斷學習的本質是:我感受到那種敬畏

趕時間,這篇先這樣,有空繼續。如果你跟上了,歡迎郵件我:evilcos@gmail.com,郵件肯定看,由於精力問題,我不一定回復,請理解。

-----------------

微信公眾號「Lazy-Thought

幾個黑客在維護,都很懶,都想改變點什麼

推薦閱讀:

從零開始寫Python爬蟲 --- 爬蟲應用:IT之家熱門段子(評論)爬取
新媒體人必會的傻瓜式爬蟲工具:上手 Web Scraper 的 5 個步驟
人生苦短,我用Python(寫在前面)
我這樣破解pexels獲取的高清原圖

TAG:爬虫 | Python | 编程 |