如何一步步學好爬蟲

在學習完基本的Python基礎以后就可以開始學習如何爬取網絡數據了。首先應該知道簡單的瀏覽器http請求機制和網頁源代碼。


在接觸了基本的urllib請求以后基本掌握如何用cookies、proxy、正則表達式;我們利用這些標準庫發現比較麻煩和構造復雜,逐想到第三方庫,如requests(請求庫)beautifulsoup(選擇器庫)這樣我們可以減少很多像標準庫那樣繁瑣的構造,而且代理直接可以加入,headers、cookies也一樣可以,非常方便。(headers要隨機更換)


那么在爬取的時候發現選擇網頁標簽的時候bs4太慢了而且很不好控制tag,會發現大家都是用lxml比較多,因為其速度很快,lxml是直接調用c的函數;scrapy的選擇器也是優先使用lxml,當然也有css選擇器。本人習慣了lxml,而且自由度很高。在爬取一般的網頁到達這里基本上夠用,那么碰到一些js渲染的網頁上述方法行不通,那么我們會另辟蹊徑去尋找selenuim、phantomjs來解決。


基本上我們都會先獲取頁面然后用一個for循環來控制滾動條上下來滑動(執行js的document),以獲取更多的網頁數據,再獲取源碼,下一步就是像上述正常來獲取數據。(對于翻頁也是用for循環控制)


我們在這個基礎上可以寫一個自己使用的類,上面很多相同操作都寫好,放入自己電腦里,以后就像第三方庫一樣直接給出url和xpath、css就可以獲取數據。


在成熟以后還是發現存在很多問題,比如走一段時間就會被服務器中斷,或是其他異常原因,我們就會選擇框架來爬取,比如本人喜歡的scrapy。當然scrapy還是要花些心思才能學好,而在學習scrapy其實就是綜合了上述的大部分基礎知識。以上都是可以加入多線程和多進程,本身scrapy是默認16個線程,可以用subprocess來控制多進程,有要求的可以維護一個代理池來爬取。


最后一種爬取那就是換語言,很多人是采用Java,本人想說的不是它,而是另外的,那就是Go,這里不細聊go,但是它的速度真的可以和c媲美,想象爬蟲用c一樣的速度在跑,是什么感覺。我們說go語言以后是趨勢,最少在Android時代是,俗話說go語言是網絡時代的c。


今天就聊這么多,晚安,各位爬蟲愛好者……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容