1. 程式人生 > >想學習爬蟲的小夥伴進來,看我獨特的風格分分鐘教你學python爬蟲

想學習爬蟲的小夥伴進來,看我獨特的風格分分鐘教你學python爬蟲

當年我在學習爬蟲的時候,看了很多大牛的回答!

但是他們的回答都很像學霸講解題目,跳步無數,然後留下一句“不就是這樣推嘛”,讓一眾小白菜鳥一臉懵逼。。作為一個0起步(之前連python都不會),目前總算掌握基礎,開始向上進階的菜鳥,深知其中的不易,所以我會在這個回答裡,儘可能全面、細節地分享給大家從0學習爬蟲的各種步驟,如果對你有幫助,請點贊~

首先!你要對爬蟲有個明確的認識,這裡引用毛主席的思想:

在戰略上藐視:

“所有網站皆可爬”:網際網路的內容都是人寫出來的,而且都是偷懶寫出來的(不會第一頁是a,下一頁是8),所以肯定有規律,這就給人有了爬取的可能,可以說,天下沒有不能爬的網站

“框架不變”:網站不同,但是原理都類似,大部分爬蟲都是從 傳送請求——獲得頁面——解析頁面——下載內容——儲存內容 這樣的流程來進行,只是用的工具不同

在戰術上重視:

持之以恆,戒驕戒躁:對於初學入門,不可輕易自滿,以為爬了一點內容就什麼都會爬了,爬蟲雖然是比較簡單的技術,但是往深學也是沒有止境的(比如搜尋引擎等)!只有不斷嘗試,刻苦鑽研才是王道!(為何有種小學作文即視感)

插要:python入門基礎資料;入門書籍;20天學習筆記+100到基礎練習題附答案;加群943752371

然後,你需要一個巨集偉的目標,來讓你有持續學習的動力(沒有實操專案,真的很難有動力)

我要爬整個豆瓣!...

我要爬整個草榴社群!

我要爬知乎各種妹子的聯絡方式*&^#%^$#

接著,你需要捫心自問一下,自己的python基本功吼不吼啊?

吼啊!——OK,開始歡快地學習爬蟲吧 !

不吼?你還需要學習一個!趕緊回去看廖雪峰老師的教程,

2.7的。至少這些功能和語法你要有基本的掌握 :

list,dict:用來序列化你爬的東西

切片:用來對爬取的內容進行分割,生成

條件判斷(if等):用來解決爬蟲過程中哪些要哪些不要的問題

迴圈和迭代(for while ):用來迴圈,重複爬蟲動作

檔案讀寫操作(open,close等):

用來讀取引數、儲存爬下來的內容等

編碼常識(codecs等):非常關鍵,爬蟲寫熟了以後遇到的各種古怪問題,很多來自於UTF-8 GBK等奇奇怪怪的編碼!這個問題先做了解,後面除錯時候再解決也不遲!

然後,你需要補充一下下面幾個內容,作為你的知識儲備:

(注:這裡並非要求“掌握”,下面講的兩點,只需要先了解,然後通過具體專案來不斷實踐,直到熟練掌握)

1、網頁的基本知識:

基本的HTML語言知識(知道href等大學計算機一級內容即可)

理解網站的發包和收包的概念(POST GET)

稍微一點點的js知識,用於理解動態網頁(當然如果本身就懂當然更好啦)

2、一些分析語言,為接下來解析網頁內容做準備

NO.1 正則表示式:扛把子技術,總得會最基礎的:

NO.2 XPATH:高效的分析語言,表達清晰簡單,掌握了以後基本可以不用正則

參考:XPath 教程

NO.3 Beautifulsoup:

美麗湯模組解析網頁神器,一款神器,如果不用一些爬蟲框架(如後文講到的scrapy),配合request,urllib等模組(後面會詳細講),可以編寫各種小巧精幹的爬蟲指令碼

官網文件:Beautiful Soup 4.2.0 文件 參考案例:

接著,你需要一些高效的工具來輔助

(同樣,這裡先了解,到具體的專案的時候,再熟悉運用)

NO.1 F12 開發者工具:

看原始碼:快速定位元素

分析xpath:1、此處建議谷歌系瀏覽器,可以在原始碼介面直接右鍵看

NO.2 抓包工具:

推薦httpfox,火狐瀏覽器下的外掛,比谷歌火狐系自帶的F12工具都要好,可以方便檢視網站收包發包的資訊

NO.3 XPATH CHECKER (火狐外掛):

非常不錯的xpath測試工具,但是有幾個坑,都是個人踩過的,,在此告誡大家:

1、xpath checker生成的是絕對路徑,遇到一些動態生成的圖示(常見的有列表翻頁按鈕等),飄忽不定的絕對路徑很有可能造成錯誤,所以這裡建議在真正分析的時候,只是作為參考

2、記得把如下圖xpath框裡的“x:”去掉,貌似這個是早期版本xpath的語法,目前已經和一些模組不相容(比如scrapy),還是刪去避免報錯

NO.4 正則表達測試工具: 線上正則表示式測試 ,拿來多練練手,也輔助分析!裡面有很多現成的正則表示式可以用,也可以進行參考!

ok!這些你都基本有一些瞭解了,現在開始進入抓取時間,上各種模組吧!python的火,很大原因就是各種好用的模組,這些模組是居家旅行爬網站常備的——

urllib

urllib2

requests

不想重複造輪子,有沒有現成的框架?

華麗麗的scrapy(這塊我會重點講,我的最愛)

遇到動態頁面怎麼辦?

selenium(會了這個配合scrapy無往不利,是居家旅行爬網站又一神器,下一版更新的時候會著重安利,因為這塊貌似目前網上的教程還很少)

phantomJS(不顯示網頁的selenium)

遇到反爬蟲策略驗證碼之類咋整?(不想折騰的直接第四個)

PIL

opencv

pybrain

打碼平臺

然後是資料庫,這裡我認為開始並不需要非常深入,在需要的時候再學習即可

mysql

mongodb

sqllite

爬來的東西怎麼用?

numpy 資料分析,類似matlab的模組

pandas(基於numpy的資料分析模組,相信我,如果你不是專門搞TB級資料的,這個就夠了)

進階技術

多執行緒、分散式

然後學習程式設計關鍵的是學以致用,天天捧一本書看不如直接上手操練,下面我通過實際的例子來講解爬蟲——

比如最近,樓主在豆瓣上認識了一個很可愛的妹子,發現她一直會更新簽名和日誌,所以沒事就會去她主頁看看,但一直沒有互相加好友(作為一隻高冷的天蠍,怎麼可以輕易加好友嘛!而且加了好友,你更新什麼都會收到推送,那多沒意思啊!一點神祕感都沒有了!),可還是想及時獲得妹子的最新動態,怎麼辦?

於是我就寫了個70幾行的python指令碼,包含爬蟲+郵件模組,跑在家裡的一臺閒置筆記本上,通過計劃任務每準點抓取妹子的簽名和最新文章一次,傳送到我的郵箱。。嗯,其實是很簡單的技術,,程式碼如下所示:

#-*-coding:utf-8-*- #編碼宣告,不要忘記!

import requests #這裡使用requests,小指令碼用它最合適!

from lxml import html #這裡我們用lxml,也就是xpath的方法

#豆瓣模擬登入,最簡單的是cookie,會這個方法,80%的登入網站可以搞定

cookie = {}

raw_cookies = ''#引號裡面是你的cookie,用之前講的抓包工具來獲得

for line in raw_cookies.split(';'):

key,value = line.split("=", 1)

cookie[key] = value #一些格式化操作,用來裝載cookies

#重點來了!用requests,裝載cookies,請求網站

page = requests.get('#妹紙的豆瓣主頁#',cookies=cookie)

#對獲取到的page格式化操作,方便後面用XPath來解析

tree = html.fromstring(page.text)

#XPath解析,獲得你要的文欄位落!

intro_raw = tree.xpath('//span[@id="intro_display"]/text()')

#簡單的轉碼工作,這步根據需要可以省略

for i in intro_raw:

intro = i.encode('utf-8')

print intro #妹子的簽名就顯示在螢幕上啦

#接下來就是裝載郵件模組,因為與本問題關聯不大就不贅述啦~

怎麼樣~是不是很簡單~你get到了嗎?