當前位置:
首頁 > 最新 > Python爬蟲入門學習指南及案例

Python爬蟲入門學習指南及案例

前段時間利用周末時間研究網路爬蟲和反爬蟲技術,然後寫了篇文章《網路爬蟲和反爬蟲技術研究》,順便簡單了解了下Python,這網路爬蟲和RPA軟體機器人可不是一回事,差別不小,在那篇文章里講了較多,Python這種編程語言簡單易懂,比較適合用來開發網路爬蟲。

最近在美國的一位老朋友知道我在研究人工智慧應用,特意推薦給我一位美國14歲華裔女孩楊君熙(Emma Yang)的手機AppTimeless(永恆)眾籌項目。在網上查了些資料,真是不看不知道,看了只有「佩服」兒子,向這位00後女孩學習!(參見前兩天專門寫的一篇文章《眾籌項目手機App Timeless(永恆)背後的故事》)

仔細想想,這位00後的楊小姐這麼了不起,一方面的而且確是她自己天才+努力,一方面也和她的父母從小時候對她的教育分不開,楊小姐在6歲就開始接觸編程,6歲!?不禁想到我6歲在做什麼?爬樹?掏鳥蛋?玩泥巴?再看看我們家那位00後小朋友,6歲好像最喜歡看動畫片!真是別人家的孩子不能比!也不用比!我們努力趕上來!

這個周末從項目組借了Python的書回來,就是專門和我家這位00後一起學習這門語言。從哪裡開始呢?Python適合開發網路爬蟲,就從一個簡單的網路爬蟲開始!

我家這位00後最喜歡音樂,經常在寫作業之餘偷偷帶上耳機聽音樂,因此,我們決定用網路爬蟲去「扒」百度音樂里的好聽音樂!這就是我們這個周末的目標!

互聯網行業發展到現在這個階段,網路上太多的信息,有用的,沒用的,不能有效利用信息就等於沒有信息,由此學習網路爬蟲的人越來越多,一方面,互聯網可以獲取的有價值的數據越來越多,而另一方面,像Python這樣的編程語言使網路爬蟲開發變得非常簡單、容易上手。

利用網路爬蟲我們可以獲取大量的價值數據,從而獲得感性認識不能得到的信息,在以下場景種網路爬蟲作用非常大:

(一)爬取數據,進行市場調研和商業分析

知乎:爬取優質答案,並篩選出各個話題下最有價值的內容。

淘寶、京東:爬取商品、評論及銷量數據,並在此數據基礎上對各種商品及用戶的消費場景進行分析。

鏈家:爬取房產買賣及租售信息,分析房價變化趨勢、然後做不同區域的房價分析。

智聯:爬取各類職位信息,然後分析各行業人才需求情況及薪資水平。

雪球網:爬取雪球高回報用戶的行為,對股票進行分析和預測。

(二)作為機器學習、數據挖掘的原始數據

機器學習,抓取更多維度的數據,便於做出更好的模型。

圖像識別,抓取網路上的大量的圖片作為訓練集進行訓練,提高圖像識別的精度。

(三)爬取優質的資源:圖片、文本、視頻

爬取知乎等圖片網站,獲得各種圖片,然後怎麼想怎麼用就看自己的需要了。

爬取微信公眾號文章,分析新媒體內容運營策略!

在沒有網路爬蟲的情況下,我們只能手動來完成這個大量重複而有枯燥簡單的複製粘貼操作,這個就是「人肉爬蟲」了!非常浪費人力,假如想要爬下來100萬行的數據,「人肉爬蟲」需要兩年廢寢忘食的工作!而高性能的網路爬蟲在一天之內就能完成!而且,不需要任何人為干預!

對於很多人而言,或者會認為網路爬蟲的技術很是複雜,技術要求很高,用Python來開發一個網路爬蟲可能需要精通Python,需要掌握Python各個知識點!但是,其實不然,我學習一門新的編程語言的經驗就是,翻翻書,直接開干,做完一個項目,啥也會了!親自實踐過,做個偽專家還是可以的。

在開始開發網路爬蟲之前,首先要熟悉一下Python編程的套路,打開Python3.6.4安裝後自帶的demo:

學完這些Python自帶的demo後,基本就掌握了Python編程的基礎,能夠看懂並寫一些Python程序了。

但是就這樣用Python開發一個網路爬蟲來爬百度音樂里的哪些好聽的音樂還不夠,這需要掌握正確的程序設計方法和一些網路爬蟲基礎知識,正好上個周末才研究了網路爬蟲和反爬蟲技術,懂得這些爬蟲的工作原理,簡單總結一下:

第一、了解網路爬蟲的基本工作原理

網路爬蟲基本上都是按「發送請求——獲得頁面——解析頁面——抽取並儲存內容」這樣的流程來工作,而這其實也是模擬了我們使用瀏覽器獲取網頁信息的過程。簡單來說,我們向伺服器發送請求後,會得到返回的頁面,通過解析頁面之後,我們可以抽取我們想要的那部分信息,並存儲在指定的文檔或資料庫中。

在這部分需要了解HTTP協議及網頁基礎知識,POSTGET,HTML,CSS,JS等,對於開發網路爬蟲而言,簡單了解就可以,不需要什麼系統學習。

第二、學習Python包並實現基本的爬蟲過程

查看了一下Python的技術資料,發現和爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider等,建議從requests+Xpath開始,requests負責連接網站,返回網頁,Xpath用於解析網頁,便於抽取數據。而如果使用BeautifulSoup,就會發現這比Xpath要省事不少,一層一層檢查元素代碼的工作全都省略了。

掌握這些之後,就會發現其實網路爬蟲的基本套路都差不多,靜態網站根本不在話下,小豬、豆瓣、糗事百科、騰訊新聞等差不多可以上手搞定了。

當然了,如果需要爬取非同步載入的網站,就還要繼續學習瀏覽器抓包分析真實請求或者學習SeleniumWeb Driver來實現,這樣,知乎、時光網這些動態的網站也就基本沒問題了。因為這兩年在工作中我對於RPA技術研究較多,Selenium技術不在話下!

在這個過程中需要了解一些Python的基礎知識,這些在Python自帶的demo里都有涉及:

文件讀寫:用來讀取參數、保存爬下來的內容

list(列表)、dict(字典):用來序列化爬取的數據

條件判斷( if/else ):解決爬蟲中的判斷是否執行

循環和迭代( for……while ):用來循環爬蟲步驟

第三、了解非結構化數據的存儲

網路爬蟲爬回來的數據可以直接用文檔形式存在本地,也可以存入資料庫中。在數據量不大的時候,可以直接通過Python的語法或pandas的方法將數據存為csv這樣的文件。當然,可能爬回來的數據並不是乾淨的,會有缺失、錯誤等等,這就還需要對數據進行清洗,可以學習pandas包的基本用法來做數據的預處理,從而得到更乾淨的數據。

第四、學習scrapy並搭建工程化的爬蟲

在掌握了前面講到的這些技術後,開發針對一般量級和複雜程度數據的網路爬蟲就基本沒有問題了,但是在遇到非常複雜的情況,仍然會力不從心,這個時候,強大的scrapy框架就非常有用了。scrapy是一個功能非常強大的網路爬蟲框架,不僅能便捷地構建request,還有強大的selector能夠方便地解析response,然而最讓人驚喜的還是其超高的性能,由此可以將網路爬蟲工程化、模塊化,學會scrapy後,就可以自己去搭建一些爬蟲框架,成為了一個合適的網路爬蟲工程師了。

安裝scrapy框架很簡單,運行命令行就可以(「pip install Scrapy」)。

第五、學習資料庫基礎以應對大規模數據存儲

在網路爬蟲爬回來的數據量小的時候,可以用文檔的形式來存儲,一旦數據量大了,這就有點行不通了,所以掌握一種資料庫是必須的,學習目前比較主流的MongoDB就OK。MongoDB可以很方便地用來存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等,當然了,也可以利用PyMongo這個組件更方便地在Python中操作MongoDB。

開發網路爬蟲,其實用到的資料庫知識非常簡單,主要是數據如何入庫、如何進行提取。對於我而言,這個完全不是問題,我剛畢業就做了兩年Oracle DBA,後來在工作前十年一直都是資料庫設計專家。

第六、掌握各種技巧來應對特殊網站的反爬措施

當然,開發網路爬蟲過程中也會經歷一些重大打擊,例如被網站封IP、比如各種奇怪的驗證碼、userAgent訪問限制、各種動態載入等等。遇到這些網站平台的反爬蟲手段,就需要一些高級的技巧來應對,常規的比如訪問頻率控制、使用代理IP池、抓包、驗證碼的OCR處理等等。往往網站在高效開發和反爬蟲之間會偏向於前者,而這也為網路爬蟲提供了閃展騰挪的空間,掌握這些應對反爬蟲的技巧,絕大部分的網站還是可以搞定的。

第七、開發分散式網路爬蟲實現大規模並發採集

開發一個網路爬蟲爬取基本數據已經不是問題了,但是這裡有一個效率問題,在爬去海量數據的時候,網路爬蟲的運行效率就是設計和構架的一個關鍵點,而用以解決這個問題的就是「分散式網路爬蟲」。

在計算機技術上,「分散式」這個概念很是高大上,最近很火的區塊鏈的本質就是「分散式的賬本系統」,但是透過現象看本質,分散式網路爬蟲其實就是利用多線程的原理讓多個網路爬蟲同時工作,需要掌握Scrapy +MongoDB + Redis這三種工具。Scrapy前面簡單介紹過來,主要用於做基本的頁面爬取,MongoDB用於存儲爬取的數據,而Redis則用來存儲要爬取的網頁隊列,也就是任務隊列。所以有些概念聽起來很嚇人,但其實分解開來看,也不過如此。當能夠寫分散式網路爬蟲的時候,那麼接下去就可以嘗試打造一些基本的網路爬蟲架構來實現一些更加自動化的數據獲取。

簡單演示一下百度音樂網路爬蟲的運行:

從百度音樂直接下載MV沒有問題了,很快發現很多非常酷的音樂不在百度音樂儲存著,而是從音悅台分享過來的,怎麼從音悅台下載喜歡的音樂文件呢?打開頁面分析了一下HTML,CSS,JavaScript,重新寫了一個python腳本,搞定!這就可以用Python來下載音悅台的高清MV了。

現在,我們家的這位00後可以使用Python開發的網路爬蟲來爬到他喜歡的各種最新流行音樂了,就算是將百度音樂和音悅台所有的MV都給爬下來也不是問題!「王者榮耀主題曲」?不行!不行!我不答應!寫作業去!寫作文去!複習功課去!預習功課去!小子,還治不了你…等我把來把黃沾先生作詞作曲的「滄海一聲笑」爬下來!欣賞ing...

簡單總結一下,學慣用Python來開發網路爬蟲,不要系統地去啃書本,而是要找一個實際項目做一做,例如這個周末我和兒子嘗試著做的百度音樂網路爬蟲,簡單學習一下就開始干,遇到問題上網查一下解決問題,問題都解決了,網路爬蟲開發出來調試通過可以運行了,然後此時總結,這個時候基本上一般地網路爬蟲都可以開發了。

學習網路爬蟲技術,不需要系統的精通一門語言,也不需要特別高深的資料庫技術,最高效的學習途徑就是從實際的項目中去學習這些零散的知識點,東成西就,然後搞定!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python文件處理
有沒有小夥伴在學習Python?點進來看了

TAG:Python |