我是如何零基础开始能写爬虫的
剛開始接觸爬蟲的時候,簡直驚為天人,十幾行代碼,就可以將無數(shù)網(wǎng)頁的信息全部獲取下來,自動選取網(wǎng)頁元素,自動整理成結構化的文件。
利用這些數(shù)據(jù),可以做很多領域的分析、市場調(diào)研,獲得很多有價值的信息,可以應用在很多的工作場景,于是果斷開始學習。
- ? -
并非開始都是最容易的
剛開始對爬蟲不是很了解,又沒有任何的計算機、編程基礎,確實有點懵逼。從哪里開始,哪些是最開始應該學的,哪些應該等到有一定基礎之后再學,也沒個清晰的概念。
因為要學編程,那先從 Python 開始吧。于是看了一些教程和書籍,了解基本的數(shù)據(jù)結構,然后是列表、字典、元組,各種函數(shù)和控制語句(條件語句、循環(huán)語句)。
學了一段時間,才發(fā)現(xiàn)自己還沒接觸到真正的爬蟲呢,而且純理論學習很快就忘了,回去復習又太浪費時間,簡直不要太絕望。把 Python 的基礎知識過了一遍之后,我竟然還沒裝一個可以敲代碼的IDE。
- ? -
開始直接上手
轉(zhuǎn)機出現(xiàn)在看過一篇爬蟲的技術文章后,清晰的思路和通俗易懂的語言讓我覺得,這才是我想學的爬蟲。于是決定先配一個環(huán)境,試試看爬蟲到底是怎么玩的。
因為怕出錯,裝了比較保險的 Anaconda,用自帶的 Jupyter Notebook 作為IDE來寫代碼??吹胶芏嗳苏f因為配置環(huán)境出各種BUG,簡直慶幸。很多時候打敗你的,并不是事情本身,說的就是爬蟲配置環(huán)境這事兒。
遇到的另一個問題是,Python 的爬蟲可以用很多包或者框架來實現(xiàn),應該選哪一種呢?我的原則就是是簡單好用,寫的代碼少,對于一個小白來說,性能、效率什么的,統(tǒng)統(tǒng)被我 pass 了。于是開始接觸 urllib、美麗湯(BeautifulSoup),因為聽別人說很簡單。
上手的第一個案例是豆瓣,照著一些爬取豆瓣電影的入門級例子開始看,從這些例子里面,了解了一點點爬蟲的基本原理:下載頁面、解析頁面、定位并抽取數(shù)據(jù)。
當然并沒有去系統(tǒng)看 urllib 和 BeautifulSoup 了,我需要把眼前實例中的問題解決,比如下載、解析頁面,基本都是固定的語句,直接用就行。
用 urllib 下載和解析頁面的固定句式
當然?BeautifulSoup 中的基本方法是不能忽略的,但也無非是?find、get_text()?之類,信息量很小。就這樣,通過別人的思路和自己查找美麗湯的用法,完成了豆瓣電影的基本信息爬取。
用 BeautifulSoup 爬取豆瓣電影詳情
- ? -
爬蟲漸入佳境
有了一些套路和形式,就會有目標,可以接著往下學了。自己去摸索爬取更多的信息,爬取多個頁面。這個時候就發(fā)現(xiàn)基礎不足了,比如爬取多個元素、翻頁、處理多種情況等涉及的語句控制,又比如提取內(nèi)容時涉及到的字符串、列表、字典的處理,還遠遠不夠。
再回去補充 Python 的基礎知識,就很有針對性,而且能馬上能用于解決問題,也就理解得更深刻。
后來認識到 xpath 之后相見恨晚,這才是入門必備利器啊,直接Chrome復制就可以了,指哪打哪。即便是要自己寫 xpath,以w3school上幾頁的 xpath 教程,一個小時也可以搞定了。
requests+xpath 爬取豆瓣TOP250圖書信息
- ? -
跟反爬蟲杠上了
通過 requests+xpath,我可以去爬取很多網(wǎng)站網(wǎng)站了,后來自己練習了小豬的租房信息和當當?shù)膱D書數(shù)據(jù)。爬拉勾的時候發(fā)現(xiàn)了問題,自己的請求根本不會返回信息,然后終于知道別人代碼中的 headers 是干啥的了?。
在爬蟲中添加 headers 信息,偽裝成真實用戶
接著是各種定位不到元素,然后知道了這是異步加載,數(shù)據(jù)根本不在網(wǎng)頁源代碼中,需要通過抓包來獲取網(wǎng)頁信息。于是在各種 JS、XHR的文件中 preview,尋找包含數(shù)據(jù)的鏈接。
當然知乎還好,本身加載的文件不多,找到了 json 文件直接獲取對應的數(shù)據(jù)。(這里要安利一個chrome插件:jsonview,讓小白輕松看懂 json 文件)
瀏覽器抓取 JavaScript 加載的數(shù)據(jù)
在這里就對反爬蟲有了認識,當然這還是最基本的,更嚴格的IP限制、驗證碼、文字加密等等,可能還會遇到很多難題。
比如后來在爬其他網(wǎng)站的時候就被封了IP,簡單的可以通過 time模塊控制爬取頻率的方法解決,限制比較嚴格或者需要保證爬取速度,就嘗試用代理IP來解決。
當然,后來也試了一下 Selenium,這個就真的是按照真實的用戶瀏覽行為(點擊、搜索、翻頁)來實現(xiàn)爬蟲,所以對于那些反爬蟲特別厲害的網(wǎng)站,又沒有辦法解決,Selenium 超級好用,雖然速度稍微慢點。
- ? -
嘗試強大的 Scrapy 框架
有了 requests+xpath 和抓包大法,就可以做很多事情了,豆瓣各分類下的電影,58同城、知乎、拉勾這些網(wǎng)站基本都沒問題。不過,當爬取的數(shù)據(jù)量級很大,而且需要靈活地處理各個模塊的話,會顯得很力不從心。
于是了解到強大的 Scrapy 框架,它不僅能便捷地構建 Request,還有強大的 Selector 能夠方便地解析 Response,然而最讓人驚喜的還是它超高的性能,可以將爬蟲工程化、模塊化。
Scrapy 框架的基本組件
學會 Scrapy,自己去嘗試搭建了簡單的爬蟲框架,在做大規(guī)模數(shù)據(jù)爬去的時候能夠結構化、工程化地思考大規(guī)模的爬取問題。
當然 Scrapy 本身的 selector 、中間件、spider 等會比較難理解,還是建議結合具體的例子,參考別人的代碼,去理解其中實現(xiàn)的過程,這樣能夠更好地理解。
用 Scrapy 爬取了大量租房信息
- ? -
本地文件搞不動了,上數(shù)據(jù)庫
爬回來大量的數(shù)據(jù)之后就發(fā)現(xiàn),本地的文件存起來非常不方便,即便存下來了,打開大文件電腦會卡得很嚴重。怎么辦呢?果斷上數(shù)據(jù)庫啊,于是開始入坑 MongoDB。結構化、非結構化的數(shù)據(jù)都能夠存儲,安裝好 PyMongo,就可以方便地在 Python 中操作數(shù)據(jù)庫了。
當然對于爬蟲這一塊,并不需要多么高深的數(shù)據(jù)庫技術,主要是數(shù)據(jù)的入庫和提取,增刪查改等基本操作。
爬取拉勾招聘數(shù)據(jù)并用 MongoDB 存儲
- ? -
傳說中的分布式爬蟲
這個時候,基本上很大一部分的網(wǎng)頁都能爬了,瓶頸就集中到爬取大規(guī)模數(shù)據(jù)的效率。因為學了 Scrapy,于是自然地接觸到一個很厲害的名字:分布式爬蟲。
分布式這個東西,一聽不明覺厲,感覺很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,除了前面學過的 Scrapy 和 MongoDB,好像還需要了解 Redis。
Scrapy 用于做基本的頁面爬取,MongoDB 用于存儲爬取的數(shù)據(jù),Redis 則用來存儲要爬取的網(wǎng)頁隊列,也就是任務隊列。
分布式這東西看起來很嚇人,但其實分解開來,循序漸進地學習,也不過如此。
分布式爬58同城:定義項目內(nèi)容部分
零基礎學習爬蟲,坑確實比較多,總結如下:
1.環(huán)境配置,各種安裝包、環(huán)境變量,對小白太不友好;
2.缺少合理的學習路徑,上來 Python、HTML 各種學,極其容易放棄;
3.Python有很多包、框架可以選擇,但小白不知道哪個更友好;
4.遇到問題甚至不知道如何描述,更不用說去尋找解決辦法;
5.網(wǎng)上的資料非常零散,而且對小白不友好,很多看起來云里霧里;
6.有些東西看似懂了,但結果自己寫代碼還是很困難;
……………………
所以跟我一樣,很多人爬坑最大的體會是:盡量不要系統(tǒng)地去啃一些東西,找一個實際的項目(從豆瓣這種簡單的入手),直接開始就好。
因為爬蟲這種技術,既不需要你系統(tǒng)地精通一門語言,也不需要多么高深的數(shù)據(jù)庫技術,從實際的項目中去學習這些零散的知識點,你能保證每次學到的都是最需要的那部分。
當然麻煩的是,在具體的問題中,如何找到具體需要的那部分學習資源、如何篩選和甄別,遇到困難時如何有效解決,是很多初學者面臨的大問題。
DC學院準備了一門非常系統(tǒng)的爬蟲課程,除了為你提供一條清晰、無痛的學習路徑,我們甄選了最實用的學習資源以及龐大的主流爬蟲案例庫。即便是零基礎,經(jīng)過短時間的學習,也能很好地掌握爬蟲這個技能,獲取你想得到的數(shù)據(jù)。?
已有 2000+ 同學加入,超級優(yōu)惠限額開啟
優(yōu)惠限前100名,先到先得,速搶!
《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組件:引擎、調(diào)度器、下載中間件、項目管道等
常用的爬蟲工具:各種數(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ā)采集——分布式爬蟲的編寫
分布式爬蟲介紹
Redis數(shù)據(jù)庫和Scrapy_redis安裝和使用
消息隊列和RabbitMQ
Celery分布式隊列簡介
2. 實訓項目(一)—— 58同城出租信息爬取
爬取58同城租房信息
scrapy爬蟲抓取網(wǎng)站的整體流程
解析函數(shù)和錯誤回調(diào)的編寫
利用管道進行數(shù)據(jù)清洗、計算和入庫
使用代理IP突破反爬限制
確定網(wǎng)頁爬取的優(yōu)先級和管道的優(yōu)先級
3. 實訓項目(二)—— 去哪兒網(wǎng)模擬登陸
利用cookie進行模擬登陸
cookie和session的重要性
分析HTTP請求尋找模擬登陸需要的所有cookie值
4. 實訓項目(三)—— 京東商品數(shù)據(jù)抓取
通用爬蟲CrawlSpider
鏈接提取器和爬取規(guī)則
部署分布式爬蟲實現(xiàn)分布式爬取
利用scrapy_redis實現(xiàn)URL去重
- 高效的學習路徑 -
?
一上來就講理論、語法、編程語言是非常不合理的,課程會直接從具體的案例入手,通過實際的操作,學習具體的知識點。我們?yōu)槟阋?guī)劃了一條系統(tǒng)的學習路徑,讓學習更加系統(tǒng)和高效。
?
說點具體的,比如我們會直接用 lxml+Xpath取代 BeautifulSoup 來進行網(wǎng)頁解析,減少你不必要的檢查網(wǎng)頁元素的操作,工具的安裝都有詳細教程及常見錯誤處理,多種工具都能完成的,我們會給你最簡單的方法,這些看似細節(jié),但可能是很多人都會踩的坑。
- 每課都有學習資料 -
?
網(wǎng)上的資料非常不系統(tǒng),且良莠不齊,往往搜索、篩選非常浪費時間。當然你可能收集了以G計的的學習資源,但保存后從來沒打開過?我們已經(jīng)幫你找到了最有用的那部分,并且用最簡單的形式描述出來,幫助你學習,你可以把更多的時間用于練習和實踐。
?
考慮到各種各樣的問題,我們在每一節(jié)都準備了課后資料,包含四個部分:
?
1.課程重點筆記,詳細闡述重點知識,幫助你理解和后續(xù)快速復習;
2.默認你是小白,補充所有基礎知識,哪怕是軟件的安裝與基本操作;
3.課內(nèi)外案例提供參考代碼學習,讓你輕松應對主流網(wǎng)站爬蟲;
4.超多延伸知識點和更多問題的解決思路,讓你有能力去解決實際中遇到的一些特殊問題。
某節(jié)部分課后資料
?
- 超多案例,覆蓋主流網(wǎng)站 -
?
課程中提供了目前最常見的網(wǎng)站爬蟲案例:豆瓣、百度、知乎、淘寶、京東、微博……每個案例在課程視頻中都有詳細分析,老師帶你完成每一步操作,專治各種?“看得懂案例,寫不出代碼” 。
?
另外,我們還會補充比如小豬、鏈家、58同城、網(wǎng)易云音樂、微信好友等案例,提供思路與代碼。多次的模仿和練習之后,你可以很輕松地寫出自己的爬蟲代碼,并能夠輕松爬取這些主流網(wǎng)站的數(shù)據(jù)。
?
?
- 爬蟲技能進階及數(shù)據(jù)存儲、處理 -
?
懂得基本的爬蟲是遠遠不夠的,所以我們會用實際的案例,帶你了解一些網(wǎng)站的反爬蟲措施,并且用具體的技術繞過限制。比如異步加載、IP限制、headers限制、驗證碼等等,這些比較常見的反爬蟲手段,你都可以很好地規(guī)避。
?
工程化的爬蟲、及分布式爬蟲技術,讓你有獲取大規(guī)模數(shù)據(jù)的可能,一次性從入門到進階。除了爬蟲的內(nèi)容,你還將了解數(shù)據(jù)庫(Mongodb)、pandas 的基本知識,幫你存儲爬取的數(shù)據(jù),同時可以對數(shù)據(jù)進行管理和清洗,你可以獲得更干凈的數(shù)據(jù),以便后續(xù)的分析和處理。
?
- 導師團隊 -
小X和小Y都是知乎爬蟲話題下的大V,并且都是造數(shù)的全職爬蟲工程師。他們給過我很多幫助,這個課也主要由他們來講授。小X和小Y在在成為大佬的路上也爬過很多坑,所以知道小白要學什么、怎么學。最重要的是,他們喜歡分享,還威脅大BOSS黃震昕(造數(shù)CEO)加入,這也是花無數(shù)心血完成的精品課程。
黃震昕
造數(shù)科技創(chuàng)始人兼CEO
創(chuàng)立的造數(shù)科技是一家新一代智能云數(shù)據(jù)采集服務提供商,幫助企業(yè)和個人輕松獲取并分析、利用外部數(shù)據(jù),幫助其完成市場分析、競品監(jiān)控、輿情監(jiān)控、商機發(fā)現(xiàn)等。造數(shù)上線一年以來,已經(jīng)服務了13000多個企業(yè)和個人客戶,分布在零售、電商、金融、資詢、大數(shù)據(jù)等行業(yè)。造數(shù)新一代智能云爬蟲產(chǎn)品已編入人教版高中信息技術教材(2018年9月出版)。
劉暢(小X)
高級爬蟲工程師?
造數(shù)爬蟲項目組主要負責人, CPO(首席爬蟲工程師),因常年對淘寶,京東,58,高德,美團,等互聯(lián)網(wǎng)獨角獸企業(yè)進行反爬策略分析并抓取,而被各大互聯(lián)網(wǎng)公司成為頭號“害蟲”,見之必殺(程序員何苦為難程序員),目前造數(shù)構建大型分布式爬蟲,和開發(fā)日IP過十萬的高效代理池系統(tǒng)。
張世潤(小Y)
高級爬蟲工程師?
愛好者:喜歡Python,擅長爬蟲,數(shù)據(jù)處理;?
創(chuàng)作者:知乎爬蟲話題大V,原創(chuàng)文章近百篇,擁有數(shù)千粉絲;?
學習者:愛學習的“萌新”,自學成長為爬蟲工程師,深諳自學之道,愿分享所有能量帶大家入門。
- 老師及時解決你的每一個問題 -
除了經(jīng)驗豐富、帶你一步步實操的課程老師之外,DC學院還建立了提升效率的學習群,助教老師會在群里及時解答學員每一個疑問。同時,你還可以跟一群未來優(yōu)秀的爬蟲工程師,分享經(jīng)驗、代碼、數(shù)據(jù),探討爬蟲和數(shù)據(jù)分析技術。
也有同學經(jīng)過一個月的學習,能夠?qū)懗龇植际降目蚣?#xff0c;去爬去大規(guī)模的數(shù)據(jù)。我們也有信心讓你在短時間內(nèi),達到爬取大規(guī)模數(shù)據(jù)的水平。
?快速解決問題,學習效率才更高
【課程信息】
「 課程名稱 」
Python 爬蟲:入門+進階
「 學習周期 」
建議每周至少學習8小時,2個月內(nèi)完成課程
「 上課形式 」
錄播課程,可隨時開始上課,反復觀看
「 面向人群 」
零基礎的小白,負基礎的小白白
「 答疑形式 」
學習群老師隨時答疑,即便是最初級的問題
「 課程資料 」
重點筆記、操作詳解、參考代碼、課后拓展
「 課程案例 」
爬取豆瓣短評、圖書、電影數(shù)據(jù)
爬取知乎用戶、回答數(shù)據(jù)
爬取淘寶、京東商品數(shù)據(jù)
爬取拉勾職位數(shù)據(jù)
爬取去哪兒旅游景點數(shù)據(jù)
爬取58同城租房數(shù)據(jù)
超低優(yōu)惠名額打架搶購中
¥299(原價¥399),限額100名
長按下方二維碼,立即去搶
如有任何疑問,按下方二維碼入群咨詢
若群滿,加 Alice 微信:datacastle2017
哦,對了,我們給每個按要求完成學習的同學
準備了DC學院的學習證書
每個證書編號對應一個獨立身份信息
- 寫在最后 -
很多人問,學爬蟲有什么用? 學完能做什么?爬蟲好學嗎? 分四個點來說說我個人的體會:
1. 數(shù)據(jù)增長的趨勢是不可逆的,信息不對稱也會越發(fā)明顯,如何有效獲取互聯(lián)網(wǎng)的大量數(shù)據(jù),來支撐有效的市場、輿論、產(chǎn)品、商業(yè)分析,得出有價值的信息,爬蟲將是一個基礎但又核心的技能。
2. 在前面學習的同學中,很多已經(jīng)能夠?qū)懟A的分布式框架,有人爬取租房、電商商品、書籍、電影等數(shù)據(jù)進行了分析,有人做出了每天自動爬取新聞、天氣的Demo,也有人爬到了大量的“妹子圖”……
3. 未來屬于大數(shù)據(jù)和人工智能,以 Python 為代表的編程技術在其中應用廣泛,獲得編程思維、掌握快速學習的能力,會大幅增加核心競爭力。爬蟲將是學習 Python 最好的入門途徑,沒有之一。
4. 很多人學了很多年 Office 還是玩不轉(zhuǎn),而正確學習爬蟲,一天爬豆瓣,兩天爬知乎,也很輕松,所以爬蟲并不難,但是要有好的學習規(guī)劃,避開那些容易讓人放棄的坑。
點擊下方“閱讀原文”,開始掌握爬蟲技能
∨
總結
以上是生活随笔為你收集整理的我是如何零基础开始能写爬虫的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特步软件测试员工资,特步集团全面预算管理
- 下一篇: VR AR应用开发交流大会在天津成功举办