寫爬蟲很簡單但也很難(附某美女站爬蟲源碼)
寫作上,我真是個很隨性的人,挖再多的坑都不一定會去補上,反正讀者也沒一直催...正因為隨性,我才說過曾經寫的那本書的經歷實在是痛苦,雖然寫完後給我帶來的好處還是很多的。也是因為隨性,將公眾號沉靜了個把月,發神經去寫博客 http://evilcos.me,一寫還寫了好幾篇。博客上主要還是技術,這是本,改不了。而公眾號,技術點談太深就不行了,更多還是科普及觀點相關的文字。
我的讀者們,尤其是收聽這麼久我公眾號(包括本知乎專欄)的讀者們,你們估計已經習慣我這樣的風格了,那請繼續保持習慣...你以為「懶人在思考」這個名字是怎麼來的,就是因為懶,說好聽點是「隨性」:D
回歸正題,我填下坑。
前兩篇文章大家可以溫習下:新人上手 Python 另類建議——被和諧了的答案爬蟲 Tip 相關與不相關的幾點補充
為什麼說寫爬蟲很簡單,你看源碼:https://github.com/evilcos/crawlers
如果你按我前兩篇文章說的,基於 Scrapy 寫爬蟲,那麼我開源的這個小爬蟲你可以直接參考:crawl3 目錄下可以翻到 rosi.py,專門爬 http://rosioo.com 這個站的美女圖片。這樣運行:
1. 按照官方文檔安裝 Scrapyhttps://doc.scrapy.org/en/1.2/intro/install.html
2. git clone https://github.com/evilcos/crawlers
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獲取的高清原圖