學習爬蟲的感想和心得


寫爬蟲真不是件簡單的事

  學習了大概兩個月的爬蟲,漸漸感覺到寫爬蟲並不是件簡單的事,有諸多的考慮,先簡單的記錄一下,有時間分部分做示例

 

一、學習爬蟲知識

  我是從python3開始做爬蟲的,首先,python3的語法必須知道,不過python3並不難,語法也非常簡潔。但是,寫着發現有個毛病,就是比如一個形參,由於不確定類型,.無法像java那樣補全,導致你如果忘了一個函數,必須查看代碼或手冊。。。不過這也是動態語言都有的問題,但好的IDE會幫你記錄,所以使用好的IDE很有必要。。哈哈。

  然后是學習python的各種庫,為了打好基礎,從基礎的庫開始學習會比較好,比如urlib,然后學習requests,這種是用來發請求的。返回的數據又是各種各樣的類型,有html,js,json,字符串等,針對每種格式,當然都需要合適的解析器,當然,正則都能做。。。這里,解析html用到xpath,beautifulsoup,pyquery等庫,js代碼需要js引擎來運行和分析,例如nodejs,v8,json的解析要用到json庫,字符串就看具體情況了。

    做完這些,基本上可以開始爬取一些數據了。。。但是,如果爬蟲真的就這么簡單的話,,那就好了哈

  然后你會想提高爬取的速度,你了解到requests庫是同步請求,也就是從發出請求到收到響應,線程一直在等,你當然啊會想到多線程,但python單進程只能跑滿一個核。。。並且多線程也沒那么好寫吧,同步控制,分配任務也需要挺多事的。所以,從python3.5開始,新增了一個aiohttp--異步請求庫,它可以發送一批請求,以事件驅動,根據回調函數來實現單線程異步。或許你會覺得這還是不夠方便,開始使用爬蟲框架,例如scrapy,這下速度突飛猛進,瓶頸在帶寬或io上了!

二、分析網站

  好了,這下普通的網站能隨心所欲的爬了,直到這天,你打開了某做了反爬的網站。。。

    為啥爬了一下就不能爬了?為啥返回結果和瀏覽器打開的不一樣啊?怎么這個要驗證碼啊?怎么這個要登錄?於是開始了解到需要使用代理防止封ip,需要偽造頭部裝得夠像瀏覽器。需要分析請求,分析各種參數代表什么意思,如何偽造,開始學習js和分析js的加密代碼---這個是真的惡心,使用postman發請求和vscode編碼和nodejs運行進行調試,或者可以用selenium+chrome這種大殺器直接莽過去,可是速度可比直接請求api慢多了。碰到需要登錄才能獲取cookies才能爬的網站,開始做注冊機(但是現在一般要手機號,成本高),或者買賬號,用來做cookie池。登錄需要識別驗證碼?驗證碼可就千奇百怪了,人工打碼or打碼平台or機器學習?終於,在掌握這么多分析技能之后,感覺到爬取一個網站多么麻煩,需要很高成本。。。

栗子:破解某網站js加密過程

三、部署項目

  前面終於寫好了爬取復雜網站的分析和技巧,現在需要部署項目,服務器就需要不少,數據庫需要准備吧,需要做分布式吧,docker,hadoop了解一下?還要維護穩定,處理各種異常,總不能跑一下就掛了吧。還有,網站突然改動一下加密,,得跟着改啊。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM