更多課程 選擇中心

Python培訓
美國上市教育機構

400-111-8989

Python培訓

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

  • 發布:韓思先生
  • 來源: 韓思工作室
  • 時間:2018-03-19 15:22

前段時間利用周末時間研究網絡爬蟲和反爬蟲技術,然后寫了篇文章《網絡爬蟲和反爬蟲技術研究》,順便簡單了解了下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 協議及網頁基礎知識,POST\GETHTMLCSSJS等,對于開發網絡爬蟲而言,簡單了解就可以,不需要什么系統學習。

 

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


查看了一下Python的技術資料,發現和爬蟲相關的包很多:urllibrequestsbs4scrapypyspider 等,建議從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 OKMongoDB 可以很方便地用來存儲一些非結構化的數據,比如各種評論的文本,圖片的鏈接等等,當然了,也可以利用PyMongo這個組件更方便地在Python中操作MongoDB


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

 

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


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

 

第七、開發分布式網絡爬蟲實現大規模并發采集


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


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

 

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

 


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


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


 

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

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

預約申請免費試聽課

填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

上一篇:基礎知識:Python與C語言異同
下一篇:Python入門知識點,Python入門基礎知識

哪些崗位學了Python更有優勢?

Python中字符串的處理技巧有哪些

零基礎學Python要掌握的小技巧

Python編程中常見的錯誤有哪些?

選擇城市和中心
黑龍江省

吉林省

河北省

湖南省

貴州省

云南省

廣西省

海南省

4438全国大成网人网站