互聯(lián)網(wǎng)的數(shù)據(jù)爆炸式的增長,而利用 Python 爬蟲我們可以獲取大量有價值的數(shù)據(jù):
1.爬取數(shù)據(jù)叽讳,進行市場調研和商業(yè)分析
爬取知乎優(yōu)質答案追他,篩選各話題下最優(yōu)質的內(nèi)容; 抓取房產(chǎn)網(wǎng)站買賣信息岛蚤,分析房價變化趨勢邑狸、做不同區(qū)域的房價分析;爬取招聘網(wǎng)站職位信息涤妒,分析各行業(yè)人才需求情況及薪資水平单雾。
2.作為機器學習、數(shù)據(jù)挖掘的原始數(shù)據(jù)
比如你要做一個推薦系統(tǒng)她紫,那么你可以去爬取更多維度的數(shù)據(jù)硅堆,做出更好的模型。
3.爬取優(yōu)質的資源:圖片贿讹、文本渐逃、視頻
爬取商品(店鋪)評論以及各種圖片網(wǎng)站,獲得圖片資源以及評論文本數(shù)據(jù)民褂。
掌握正確的方法朴乖,在短時間內(nèi)做到能夠爬取主流網(wǎng)站的數(shù)據(jù),其實非常容易實現(xiàn)助赞。
但建議你從一開始就要有一個具體的目標,在目標的驅動下袁勺,你的學習才會更加精準和高效雹食。這里給你一條平滑的、零基礎快速入門的學習路徑:
1.了解爬蟲的基本原理及過程
2.Requests+Xpath 實現(xiàn)通用爬蟲套路
3.了解非結構化數(shù)據(jù)的存儲
4.應對特殊網(wǎng)站的反爬蟲措施
5.Scrapy 與 MongoDB期丰,進階分布式
01 了解爬蟲的基本原理及過程
大部分爬蟲都是按“發(fā)送請求——獲得頁面——解析頁面——抽取并儲存內(nèi)容”這樣的流程來進行群叶,這其實也是模擬了我們使用瀏覽器獲取網(wǎng)頁信息的過程。
簡單來說钝荡,我們向服務器發(fā)送請求后街立,會得到返回的頁面,通過解析頁面之后埠通,我們可以抽取我們想要的那部分信息赎离,并存儲在指定的文檔或數(shù)據(jù)庫中。
在這部分你可以簡單了解 HTTP 協(xié)議及網(wǎng)頁基礎知識端辱,比如 POST\GET梁剔、HTML虽画、CSS、JS荣病,簡單了解即可码撰,不需要系統(tǒng)學習。
02 學習 Python 包并實現(xiàn)基本的爬蟲過程
Python中爬蟲相關的包很多:urllib个盆、requests脖岛、bs4、scrapy颊亮、pyspider 等柴梆,建議你從requests+Xpath 開始,requests 負責連接網(wǎng)站编兄,返回網(wǎng)頁轩性,Xpath 用于解析網(wǎng)頁,便于抽取數(shù)據(jù)狠鸳。
如果你用過 BeautifulSoup揣苏,會發(fā)現(xiàn) Xpath 要省事不少,一層一層檢查元素代碼的工作件舵,全都省略了卸察。掌握之后,你會發(fā)現(xiàn)爬蟲的基本套路都差不多铅祸,一般的靜態(tài)網(wǎng)站根本不在話下坑质,小豬、豆瓣临梗、糗事百科涡扼、騰訊新聞等基本上都可以上手了。
來看一個爬取豆瓣短評的例子:
選中第一條短評盟庞,右鍵-“檢查”吃沪,即可查看源代碼
把短評信息的XPath信息復制下來
我們通過定位,得到了第一條短評的 XPath 信息:
如果我們想爬取很多條短評什猖,那么自然應該去獲绕北搿(復制)更多這樣的 XPath:
觀察第1、2不狮、3條短評的 XPath降铸,你會發(fā)現(xiàn)規(guī)律,只有<li>后面的序號不一樣摇零,恰好與短評的序號相對應推掸。那如果我們想爬取這個頁面所有的短評信息,那么不要這個序號就好了呀。
通過XPath信息终佛,我們就可以用簡單的代碼將其爬取下來了:
爬取的該頁面所有的短評信息
當然如果你需要爬取異步加載的網(wǎng)站俊嗽,可以學習瀏覽器抓包分析真實請求或者學習Selenium來實現(xiàn)自動化爬取,這樣铃彰,知乎绍豁、時光網(wǎng)、貓途鷹這些動態(tài)的網(wǎng)站也基本沒問題了牙捉。
你還需要了解 Python 的基礎知識竹揍,比如:
文件讀寫操作:用來讀取參數(shù)、保存爬取內(nèi)容
list(列表)邪铲、dict(字典):用來序列化爬取的數(shù)據(jù)
條件判斷(if/else):解決爬蟲中的判斷是否執(zhí)行
循環(huán)和迭代(for ……while):用來循環(huán)爬蟲步驟
03 非結構化數(shù)據(jù)的存儲
爬回來的數(shù)據(jù)可以直接用文檔形式存在本地芬位,也可以存入數(shù)據(jù)庫中。
開始數(shù)據(jù)量不大的時候带到,你可以直接通過 Python 的語法或 pandas 的方法將數(shù)據(jù)存為text昧碉、csv這樣的文件。還是延續(xù)上面的例子:
用Python的基礎語言實現(xiàn)存儲:
用pandas的語言來存儲:
這兩段代碼都可將爬下來的短評信息存儲起來揽惹,把代碼貼在爬取代碼后面即可被饿。
存儲的該頁的短評數(shù)據(jù)
</figure>
當然你可能發(fā)現(xiàn)爬回來的數(shù)據(jù)并不是干凈的,可能會有缺失搪搏、錯誤等等狭握,你還需要對數(shù)據(jù)進行清洗,可以學習 pandas 包疯溺,掌握以下知識點就好:
缺失值處理:對缺失數(shù)據(jù)行進行刪除或填充
重復值處理:重復值的判斷與刪除
空格和異常值處理:清楚不必要的空格和極端论颅、異常數(shù)據(jù)
數(shù)據(jù)分組:數(shù)據(jù)劃分、分別執(zhí)行函數(shù)囱嫩、數(shù)據(jù)重組
04掌握各種技巧恃疯,應對特殊網(wǎng)站的反爬措施
爬取一個頁面的的數(shù)據(jù)是沒問題了,但是我們通常是要爬取多個頁面墨闲。
這個時候就要看看在翻頁的時候url是如何變化了今妄,還是以短評的頁面為例,我們來看多個頁面的url有什么不同:
通過前四個頁面损俭,我們就能夠發(fā)現(xiàn)規(guī)律了,不同的頁面潘酗,只是在最后標記了頁面的序號杆兵。我們以爬取5個頁面為例,寫一個循環(huán)更新頁面地址就好了仔夺。
當然琐脏,爬蟲過程中也會經(jīng)歷一些絕望啊,比如被網(wǎng)站封IP、比如各種奇怪的驗證碼日裙、userAgent訪問限制吹艇、各種動態(tài)加載等等。
遇到這些反爬蟲的手段昂拂,當然還需要一些高級的技巧來應對受神,常規(guī)的比如訪問頻率控制、使用代理IP池格侯、抓包鼻听、驗證碼的OCR處理等等。
比如我們經(jīng)常發(fā)現(xiàn)有的網(wǎng)站翻頁后url并不變化联四,這通常就是異步加載撑碴。我們用開發(fā)者工具取分析網(wǎng)頁加載信息,通常能夠得到意外的收獲朝墩。
通過開發(fā)者工具分析加載的信息.比如很多時候如果我們發(fā)現(xiàn)網(wǎng)頁不能通過代碼訪問醉拓,可以嘗試加入userAgent 信息,甚至是瀏覽器的 cookie 信息收苏。
往往網(wǎng)站在高效開發(fā)和反爬蟲之間會偏向前者亿卤,這也為爬蟲提供了空間,掌握這些應對反爬蟲的技巧倒戏,絕大部分的網(wǎng)站已經(jīng)難不到你了怠噪。
05. Scrapy 與 MongoDB,進階分布式
掌握前面的技術杜跷,一般量級的數(shù)據(jù)和代碼基本沒有問題了傍念,但是在遇到非常復雜的情況,可能仍然會力不從心葛闷,這個時候憋槐,強大的 scrapy 框架就非常有用了。
scrapy 是一個功能非常強大的爬蟲框架淑趾,它不僅能便捷地構建request阳仔,還有強大的 selector 能夠方便地解析 response,然而它最讓人驚喜的還是它超高的性能扣泊,讓你可以將爬蟲工程化近范、模塊化。
分布式爬取租房信息
爬取的數(shù)據(jù)量大了延蟹,自然會需要數(shù)據(jù)庫评矩,MongoDB 可以方便你去存儲大規(guī)模的數(shù)據(jù)。因為這里要用到的數(shù)據(jù)庫知識其實非常簡單阱飘,主要是數(shù)據(jù)如何入庫斥杜、如何進行提取虱颗,在需要的時候再學習就行。
MongoDB 存儲職位信息
分布式這個東西蔗喂,聽起來非常嚇人忘渔,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis 這三種工具缰儿。
Scrapy 用于做基本的頁面爬取畦粮,MongoDB 用于存儲爬取的數(shù)據(jù),Redis 則用來存儲要爬取的網(wǎng)頁隊列返弹,也就是任務隊列锈玉。
這個時候,你已經(jīng)可以去寫分布式爬蟲了义起。
你看拉背,這一條學習路徑下來,你已然可以成為老司機了默终,非常的順暢椅棺。所以在一開始的時候,盡量不要系統(tǒng)地去啃一些東西齐蔽,找一個實際的項目(開始可以從豆瓣两疚、小豬這種簡單的入手),直接開始就好含滴。
因為爬蟲這種技術诱渤,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術谈况,高效的姿勢就是從實際的項目中去學習這些零散的知識點勺美,你能保證每次學到的都是最需要的那部分。
當然唯一麻煩的是碑韵,在具體的問題中赡茸,如何找到具體需要的那部分學習資源、如何篩選和甄別祝闻,是很多初學者面臨的一個大問題占卧。
不過不用擔心,我們準備了一門非常系統(tǒng)的爬蟲課程联喘,除了為你提供一條清晰的學習路徑华蜒,我們甄選了最實用的學習資源以及龐大的主流爬蟲案例庫。短時間的學習豁遭,你就能夠很好地掌握爬蟲這個技能叭喜,獲取你想得到的數(shù)據(jù)。
《Python爬蟲:入門+進階》大綱
第一章:Python 爬蟲入門
1堤框、什么是爬蟲
網(wǎng)址構成和翻頁機制
網(wǎng)頁源碼結構及網(wǎng)頁請求過程
爬蟲的應用及基本原理
2域滥、初識Python爬蟲
Python爬蟲環(huán)境搭建
創(chuàng)建第一個爬蟲:爬取百度首頁
爬蟲三步驟:獲取數(shù)據(jù)、解析數(shù)據(jù)蜈抓、保存數(shù)據(jù)
3启绰、使用Requests爬取豆瓣短評
Requests的安裝和基本用法
用Requests 爬取豆瓣短評信息
一定要知道的爬蟲協(xié)議
4、使用Xpath解析豆瓣短評
解析神器Xpath的安裝及介紹
Xpath的使用:瀏覽器復制和手寫
實戰(zhàn):用 Xpath 解析豆瓣短評信息
5沟使、使用pandas保存豆瓣短評數(shù)據(jù)
pandas 的基本用法介紹
pandas文件保存委可、數(shù)據(jù)處理
實戰(zhàn):使用pandas保存豆瓣短評數(shù)據(jù)
6、瀏覽器抓包及headers設置(案例一:爬取知乎)
爬蟲的一般思路:抓取腊嗡、解析着倾、存儲
瀏覽器抓包獲取Ajax加載的數(shù)據(jù)
設置headers 突破反爬蟲限制
實戰(zhàn):爬取知乎用戶數(shù)據(jù)
7、數(shù)據(jù)入庫之MongoDB(案例二:爬取拉勾)
MongoDB及RoboMongo的安裝和使用
設置等待時間和修改信息頭
實戰(zhàn):爬取拉勾職位數(shù)據(jù)
將數(shù)據(jù)存儲在MongoDB中
補充實戰(zhàn):爬取微博移動端數(shù)據(jù)
8燕少、Selenium爬取動態(tài)網(wǎng)頁(案例三:爬取淘寶)
動態(tài)網(wǎng)頁爬取神器Selenium搭建與使用
分析淘寶商品頁面動態(tài)信息
實戰(zhàn):用Selenium 爬取淘寶網(wǎng)頁信息
第二章:Python爬蟲之Scrapy框架
1卡者、爬蟲工程化及Scrapy框架初窺
html、css客们、js崇决、數(shù)據(jù)庫、http協(xié)議底挫、前后臺聯(lián)動
爬蟲進階的工作流程
Scrapy組件:引擎恒傻、調度器、下載中間件建邓、項目管道等
常用的爬蟲工具:各種數(shù)據(jù)庫盈厘、抓包工具等
2、Scrapy安裝及基本使用
Scrapy安裝
Scrapy的基本方法和屬性
開始第一個Scrapy項目
3官边、Scrapy選擇器的用法
常用選擇器:css沸手、xpath、re拒逮、pyquery
css的使用方法
xpath的使用方法
re的使用方法
pyquery的使用方法
4罐氨、Scrapy的項目管道
Item Pipeline的介紹和作用
Item Pipeline的主要函數(shù)
實戰(zhàn)舉例:將數(shù)據(jù)寫入文件
實戰(zhàn)舉例:在管道里過濾數(shù)據(jù)
5、Scrapy的中間件
下載中間件和蜘蛛中間件
下載中間件的三大函數(shù)
系統(tǒng)默認提供的中間件
6滩援、Scrapy的Request和Response詳解
Request對象基礎參數(shù)和高級參數(shù)
Request對象方法
Response對象參數(shù)和方法
Response對象方法的綜合利用詳解
第三章:Python爬蟲進階操作
1栅隐、網(wǎng)絡進階之谷歌瀏覽器抓包分析
http請求詳細分析
網(wǎng)絡面板結構
過濾請求的關鍵字方法
復制、保存和清除網(wǎng)絡信息
查看資源發(fā)起者和依賴關系
2玩徊、數(shù)據(jù)入庫之去重與數(shù)據(jù)庫
數(shù)據(jù)去重
數(shù)據(jù)入庫MongoDB
第四章:分布式爬蟲及實訓項目
1租悄、大規(guī)模并發(fā)采集——分布式爬蟲的編寫
分布式爬蟲介紹
Scrapy分布式爬取原理
Scrapy-Redis的使用
Scrapy分布式部署詳解
2、實訓項目(一)——58同城二手房監(jiān)控
3恩袱、實訓項目(二)——去哪兒網(wǎng)模擬登陸
4泣棋、實訓項目(三)——京東商品數(shù)據(jù)抓取