想學習爬蟲的小夥伴進來,看我獨特的風格分分鐘教你學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到了嗎?