總結 | 反思 | 分享
學習Python爬蟲2個月了,一路驚喜一路bug,苦辣酸甜不言中。今天正好周末,做一下階段性總結。
怎么是總結(2)?因為(1)在這里呀:自學爬蟲一月總結
(還有看到這個標題大家也別太疑惑,只是參加了彭老師的征文大賽順便加上了而已233)
以下內容將圍繞這張圖展開:
一、學習收獲
數據說話
從今年3月初開始,0基礎自學。中間也是斷斷續續,因為還要上課。總共做了主要項目13個,寫了博客16篇。目前在scrapy的進階階段,準備學習分布式。
4月11日開通了知乎專欄,現在剛好1個月。
到5月14日 15:50為止,各種數據
簡書文集:文章16,文集訂閱82,瀏覽5.8k,評論130,喜歡123,贊賞10
知乎專欄:文章16,專欄關注934,收藏2.0K,評論307,贊同659,贊賞4
github項目:star25,fork 9,watch 3
其它:收到不少盆友的反饋,有問如何學習爬蟲的,有在評論區支持鼓勵的,有大神提意見給建議的,有私信我要堅持寫下去的,值乎問問題的,直接過來問聯系方式的233,甚至有專欄、公眾號求轉載的,還有半夜兩點過來文章下面贊賞支持的。。。
我一個萌新,真的是受寵若驚啊!
收到這么多反饋和鼓勵,出乎意料,超級超級感動~
特此謝謝每一位關注、支持我的朋友們,寬容我的爛文、爛代碼還愿意提供寶貴建議的大神們,鞠躬,筆芯,么么噠 \^O^/~
我會繼續保證文章的質量,同時努力學習出更高階、更系統的內容。
還有這段時間,不僅學到了一些python爬蟲知識,對python編程開始有了接觸和了解,隨著學習也認識了自己的不足。學習過程中認識了很多熱愛python、熱愛數據科學的盆友和大神,從他們身上也學到很多東西。
二、一些分享
其實本來想寫"經驗分享",可是想想編程界臥虎藏龍,而且自己目前學的連冰山一角都算不上,這樣豈不班門弄斧(其實我也不造,當初哪來的耿直勇氣開知乎專欄@_@)
坑已然挖好不好回頭,還是談談我的看法吧,也算是回答之前一些盆友們的問題~ (一些觀點不成熟,大神們笑笑就好~)
1)如何學習python爬蟲
2)如何做好一個項目
3)如何寫好一篇博客
1)學習python爬蟲
1、學習路線及資料推薦
這個問題有一些同學來問過,我在自學爬蟲一月總結提過一些但不是很全,現在進行一下補充。
(當然以下僅是我個人的看法,每個人學習曲線、學習方式都不一樣,做個參考就好)
首先建議先對爬蟲做個大概了解,推薦董大的Live:爬蟲從入門到進階
然后就是Python基礎學習,書籍可以《簡明python教程》或者《learn python the hard way》等,博客推薦廖雪峰老師的Python3教程 。單單為了學習爬蟲,可以先跳過web開發部分。
爬蟲基礎urllib,re,requests,BeautifulSoup,Xpath等等,崔慶才大神的博客:Python爬蟲學習系列教程,單單看看這些基礎知識肯定枯燥,結合例子最好不過啦,于是可以循序漸進的看看上面例子。中間會需要一些http知識,可以看《圖解http》。
爬完文字爬圖片,爬完靜態爬動態。然后遇到Ajax網頁就需要抓包,這個就講的不錯:爬蟲從入門到精通——網頁的下載,順帶提一下這個專欄一些基礎知識很詳細。
爬到拉勾、豆瓣了,會獨立(對是獨立)分析網頁抓包,能夠繞過一些簡單的反爬,進行文件、excel、數據庫等簡單存儲,這時候就差不多爬蟲入門了。
然后可以學習爬蟲框架如scrapy、pyspider等。scrapy基礎推薦專欄木制robot的爬蟲世界,很詳細,而且值得一提作者自學成功轉行了,比較遺憾的是只介紹了幾篇。(目前我也在看scrapy,想匯總做一個較系統的系列。不過慚愧,學習速度還是太慢了)
進階篇,最常見多進程、多線程,selenium,PhantomJS,網上教程很散需要自己挖掘,還是回歸靜謐的博客。
其實進階的話還遠不止這些,在知乎上看到幾個思路:Python爬蟲進階?-知乎,這個問題xlzd、王家葳這兩個大神的答案很精彩。
然后董大(董偉明)在 python分享中初級爬蟲教程泛濫是否有其語法特征和生態環境的鍋?- 知乎 中提供的思路也非常不錯。
應該了解到要做的東西其實還很多,代理IP池、Cookies池、驗證碼、分布式、緩存、調度、反反爬等等,需要自己慢慢摸索了。
推薦幾個大神的博客:
簡書:蝸牛仔、treelake、qiye、comboo(這家伙已經在分析框架的源碼了)
知乎專欄:一起學習python網絡爬蟲、擼代碼,學知識、數據冰山、學習編程
笑虎大神的專欄"擼代碼、學知識",文章質量很高,且不限于Python爬蟲,里面甚至有一些Flask開發的介紹等等。
"數據冰山"人氣旺,偏重于數據分析挖掘,不過可以擴大視野不是,爬蟲本來就是用來分析的嘛~~
還有"學習編程"是“數據帝”路人甲路人甲的專欄(大家都應該不陌生),除了學習借鑒數據分析的思維方式,里面偶爾會有一些學習編程的資料推薦,不能太棒哦。
此外還可以去github上找,很多不說了,提一個有趣的反反爬倉庫:Anti-Anti-Spider,應該很多人都知道。
之后還可以分析框架源碼,開發自己的爬蟲框架,甚至寫可視化的爬蟲。
(當然這時你很可能已經不滿足于爬蟲了,學學web開發就挺好,搞搞數據分析機器學習也不錯)
當你已經"爬過萬水千山",瀏覽器能get基本也能爬到,并且有能力開發自己的爬蟲框架,這時你就已經達到一種境界了,所謂"看山還是山,看水還是水"。
更高級的還有搜索引擎,好遠啊不扯了>_<
目前暫時就是這些,想到再補充,也歡迎大家評論區提建議~
2、我的學習方式
之前的總結說過了:自學爬蟲一月總結
總的來說:大體需求、項目驅動、知識點復查、博客記錄、定時總結
3、其它,比如是否需要培訓
一句話:于心而言真的不需要,看個人,小心智商稅
2 )做好一個項目
python爬蟲學習對實戰的要求很強,除了get基礎技能,反反爬經驗也是必需在實戰中積累的。
不過項目在精而不在多,入門后你會發現許多東西都是如出一轍,許多網站通過抓包調用API就可實現,這時候真的沒有必要再迷戀在抓取簡單網頁的成就感中了(這是不是爬蟲初級教程泛濫的原因之一233),你需要趕緊的進階,進階,進階!!!
我覺得關鍵在于:如何設計學習路線,通過較少的項目,循序漸進地進行爬蟲學習。
不過做好一個項目也不是那么簡單的事情,細節的東西太多了,首先安裝都能成為一個坑。不信你看,這是我安裝mysql遭遇的:
還好寶寶心理素質比較強,那如何做好一個項目呢,在明確好學習路線后,有幾個點
1、基礎知識
基礎知識一般官網資料就可以了。有時覺得一些博客更淺簡易懂,而且很多東西是經過作者思考過歸納匯總的,可以借鑒。
2、分析源碼和網站結構、制定抓取策略
其實我很少看審查元素,一般是直接分析源碼。這么做是因為,我們的瀏覽器訪問網頁時“看到”的東西,其實是源碼。如果你是初學,不要怕密集恐懼啦,養成習慣后漸漸會變得很有意思哦。
比如我在爬pexels圖片網時,發現其圖片接口就隱藏在源碼中;分析豆瓣發現其分PC端和移動端,兩者網頁不太一樣,而且分析發現不登陸的話,某些數據是無法爬下來的;分析拉勾時發現了它的頁面變動的規律,一個障眼法22333 。
還有網站結構,主要是找出url規律和網站反爬策略,對于有一點前端經驗的盆友來說,簡直不是事兒呀。
然后就是指定爬取策略了,可以根據html結構選擇最合適、高效的數據提取方式,是re,BeautifulSoup,還是Xpath?
3、先自己做,有自己的想法
我的話最初兩個例子是照著崔慶才大神的博客來的,后面就全自己找了。個人覺得在大概摸清爬蟲程序的套路后(一兩個例子),遇到一個項目,自己想思路,自己寫程序,實在不行再借鑒別人的方法。
紙上得來終覺淺,絕知此事要躬行,別人的收獲畢竟也只是別人的,不親自探索,還是很難真正學到東西。
4、它山之石,可以攻玉
有時候我們借鑒別人一些好的想法,將其運用于我們的項目中,然后可以事半功倍。(感嘆互聯網的開源精神、開放共享環境就是棒呀) 但并不意味著將復制粘貼就完了,至少得理解一下原理和思路吧,加上自己的想法那更好啦~
我的博客前兩篇,雖然是跟著崔慶才大神的博客學習的,但是真正爬取的時候并不是一步步照搬,而是自己適當改了下; 在Scrapy之斷點續爬(存入MySQL)中,斷點續爬想法來自知乎,但發現實例很少啊,于是自己寫程序實踐了它,參考了大神的博客的一小段,但覺得累贅根據情況改了一下,然后又查資料發現了另一種python中操作mysql的方法。
你看,大概就這樣,有點github上fork思想的意味?
5、尋求最佳方案
這里就不贅述了。尋求解決問題新途徑,有沒有別的方式呢,怎樣實現最簡單有效美好?不斷改bug,不斷提需求,再改,直到滿意為止。(記得當初做那個pixabay圖片下載器也改了好久)
6、提高搜商
何為“搜商”,就是搜索定位有效資源的能力。簡直程序員必備技能啊。學習過程中各種bug,遇到問題首先自己解決最靠譜。
目前網絡這么發達,百度、知乎、谷歌、知乎、簡書、stackoverflow、CSDN等等,一般的小坎還是容易過得去的。
逛逛別人的博客,或者瀏覽某個社區,偶爾還會發現一些好的知識點和思路呢。(之前在stackoverflow上發現個神奇的語法糖,于是拿來用了,爬教務網僅花代碼30行左右)
7、善用工具
不說太多,IDE用Pycharm就不錯,抓包fiddler,數據分析BDP簡單粗暴,數據庫可視化Navicat等等,利用工具提高開發效率。
8、學會提問
來自知乎路人甲,很贊:如何向別人請教問題才能得到解答回復?
3)寫好一篇博客
1、明確主題
2、突出亮點、有自己的想法
建立在做好項目的基礎上,不贅述。
3、充實內容
需要準備好各種材料。
4、邏輯清晰
我一般采用“總分總”模式,分點展開,文末最后簡要總結。覺得這樣不僅僅邏輯清晰,也可以鍛煉自己歸納總結的能力,同時查找的時候也非常方便:D
5、語言鮮明
哈哈這一點上我可能是假的段子手→_→
但,還是建議嚴肅一點來寫技術文,畢竟,抖機靈也是要看天賦噠:D (逃~
6、尊重版權
引用別人的東西,最好注明來源、作者。
7、產品意識
這一點最初是在彭老師的文章里看到的,很有意思(目前找不到了orz),大概意思是:如何最小化的代價做出一個東西,如何擴展形成一個系列體系?
其實與爬蟲學習路線設計緊密相關,形成體系后也益處多多,若一個完整的知識體系,復習起來基本不費力?
三、總結反思
1、不足之處
首先基礎存在很大漏洞,才發現其實前面爬蟲中,根本就不需要多少python知識的,基本的數據結構、文件操作、類與模塊、函數和面向對象都差不多了。到了Scrapy這一塊,裝飾器初露水面,各種中間件寫起來就費力了,目前惡補基礎中。
其次是浮躁,感覺是沒有以前靜的下心,是因為夏天到了還是進階本來就麻煩?
最后說一下,爬蟲真的是上手快精通難,越到后面需要考慮的東西就越多,爬與反爬之間的博弈愈發強勢,做一個項目花時間越來越多了,挺累。
2、進階的一些想法
肯定得先補好基礎啦,然后分布式希望月底之前拿下來,暑假想學flask搭個博客,之后還想學算法(貌似時間不夠用啊(?Д?)?)
四、我的爬蟲博客系列
前兩天有位大神在簡書下寫了評論,很慶幸與其交流了一下,大神的建議很有用,同時也愈發感覺進階之路漫漫。
之后,居然有人說我的博客越來越成體系了,很驚訝。這一說還真萌生了將其擴充成一個體系的想法,然后就是下面這樣:
分四個階段:
入門篇、框架篇、進階篇、源碼分析篇
<入門篇>
2、百度貼吧
7、拉勾網爬蟲(一)
<框架篇>(部分待探索學習)
主要介紹Scrapy
3、Scrapy爬多級網頁及圖片(ImagesPipeline)
6、Scrapy之代理ip、ip池
7、Scrapy之Cookies、Cookies池
9、Scrapy-redis構建簡單分布式
10、Scrapy-redis較復雜的分布式
<進階篇>(待探索學習)
1、多線程
2、多進程
3、多線程+多進程
4、selenium、PhantomJS破解JS網頁
6、驗證碼破解
7、視頻類爬蟲系列
8、大規模電商爬蟲系列(淘寶|京東|亞馬遜)
9、自己開發個分布式爬蟲框架(難)
10、寫可視化的爬蟲(難)
<源碼分析篇>(待探索學習)
1、Scrapy源碼分析
2、requests源碼分析等等
(以上也只初步構想,不能保證完全完成)
按順序學習,點亮到進階篇倒數第三個,應該可以找得到工作了吧?
若如期找到工作,會不會很幸福呢
五、最后的總結
不得不說,學習爬蟲真的很真像升級打怪。需要我們不斷對自己提需求,解決掉一個又一個問題后,提升自信心。整個過程涵蓋解決問題、總結歸納、表達展現、形成系列等環節,但其實深入思考,發現最終都可以歸結為一個思維方式的終極問題。
面對一個問題,如何定位有效資源,如何快速熟悉一個領域,如何制定初步方案,如何解決執行中出現的問題,如何不斷優化、維護并打造一款產品系列......這些思維方式,其實是放之四海而皆準的。
慣用總結套路就不來了,放個圖
16篇文章,一個爬蟲系列,一篇總結文,加一個思維導圖。勉強算有理有據,邏輯清晰?算不算對python表了個白?
如果這都不算愛
那我
我就
就
就
。
。
。
。
。
。
。
。
。
。
抖個機靈吧~
(實打干貨沒人看,抖個機靈千百贊?)
總是套路留人心啊~
都讓一下,我要放大招了,哼~
表白文藝范,怎能少了詩?不說了,總之
路漫漫其修遠兮,吾將上下而爬蟲
洛陽親友如相問,唯有python在心中