在爬100萬資料的時候,我發現了爬蟲的高階之路

2021-09-19 08:00:20 字數 1909 閱讀 5783

學習最好還是要以需求為驅動才能夠快速成長。這是我最近一段時間的體會,其實也是我最近在寫爬蟲的思考。通過需求,讓你處於緊迫的狀態,不斷學習新的知識,去滿足這樣那樣的需求。這個時候,你會處於一種高度集中的狀態,你的學習能力也是最強的時候。

之前的爬蟲文章使用的都是一些基礎 python 的知識,特別是在做一些小的專案的時候,運用好那些基礎知識就完全夠用了。所以如果沒有用到新的知識或沒有接觸到新的知識的時候,我就沒有寫出來,這就是這麼長時間沒有發文的原因。並且,我感覺我的爬蟲技術一直都處在初級階段,原地踏步,沒有一點進步,也就造成了「沒話可說」的尷尬地步。

前幾周幫別人寫了乙份爬蟲,邏輯不難,步驟也不繁瑣,只要簡單的幾步就可以,但是資料量是我目前接觸的最多的一次,將近100萬的資料量。

就算這條蟲子不慌,它爹心裡也慌呀!要是中途出現什麼情況,沒有做好斷點續爬的準備的話,那豈不是得從頭再來?

還有就是,這麼多的資料,在一台機子上爬,效率明顯是很慢的,如果學會一點集群和分布式爬蟲,使用上,那每一台機子的壓力就會小很多。

還有一點能夠提高效率的方法就是通過使用程序、執行緒。這些我也還不是很懂,因為這次的專案需要selenium才能通過驗證,所以我也就沒有使用,不然肯定也會學一下,不知道selenium中有沒有多程序,執行緒這種東西?

再有就是爬蟲的監控異常情況的通知。爬蟲的監控我沒有接觸過,不過異常情況的通知,我倒是想著通過郵件提醒,雖然簡單,但是卻也能夠達到目的,所以我在做這個專案的時候,使用了一下,感覺還可以,後面可能會詳細的寫一寫。

說爬蟲怎麼能不說反爬呢?說一下我這次遇到的反爬機制。它的反爬主要是在你登陸的時候,就已經乾掉了大部分想要爬取它資訊的人了。(因為不能透露太多的資訊,所以就用**來舉個例子吧,個人感覺難度跟**也是差不多的。)

為什麼這麼說呢?你可以去試一下**的登陸,看是有多麼的難。相信爬過**的都知道,**的ua引數,是經過了演算法將一大堆因素組合起來的,想要破解,可能要琢磨到腦殼疼吧。。。

所以只能通過使用selenium進行模擬登陸。但我可以很絕對地告訴你,**能夠識別你使用了自動化工具,你的滑塊驗證碼無論怎麼重新整理,永遠都是錯誤狀態,永遠不會成功。就像下圖一樣

我試著使用了網上一種聲稱能夠突破的辦法: 使用**。果然,理想很美滿,現實很骨感。滑塊驗證碼是通過了,但是逃不過異地登陸簡訊驗證這一關。

如果想要體驗一下我當時的絕望感,可以自己嘗試著去搞一下**的資料看下,看一下你能不能成功 「突破上分」

當然,bb了這麼一大堆,還是要給一點乾貨的。那就給個我個人認為爬蟲高階的方向吧!

過硬的反「反爬」能力

程序與執行緒

斷點續爬

分布式爬蟲監控

異常通知

這次爬蟲,我有一種打通了任督二脈的感覺,這種感覺就好像,那些打王者榮耀厲害的人說的意識一樣 :什麼時候該反野,什麼時候該團一樣。不知道這樣講能不能體會到我醍醐灌頂的那種感覺?

還有一點體會,就是把事情往難了想和往量多了想,你就能找到當下自己所察覺不到的漏洞。當然,往難裡想也是需要一定的基礎的;但是往量多的方面想,這就沒有任何難度了,在腦海中模擬,總能挑出一點瑕疵了吧?

以前聽過下面這句話,沒有什麼深刻的體會;現在,算是真正的理解了。

再大的困難除以13億,都會變得很渺小!再小的力量乘以13億,就會變成愛的海洋。

我發現了VS的乙個秘密

今天在做新聞發布系統的時候,遇到了這樣乙個問題,就是我在寫sqlhelper這個類的時候,明明已經引用了system.data這個命名空間,但是在寫的時候datatable卻寫不出來。大家可以看一下我是怎麼引用的。第二步 選中然後確定 但是我在 裡面並沒有寫using system.data 所以輸...

我發現了VS的乙個秘密

今天在做新聞發布系統的時候,遇到了這樣乙個問題,就是我在寫sqlhelper這個類的時候,明明已經引用了system.data這個命名空間,但是在寫的時候datatable卻寫不出來。大家可以看一下我是怎麼引用的。第二步 選中然後確定 但是我在 裡面並沒有寫using system.data 所以輸...

我發現了乙個特別Man的Linux工具!!!

linux命令不用我多說吧,誰還不會幾個?但是乙個命令可能有幾十種用法,就拿最簡單也是最常用的ls來舉例,它就有將近20種options用法 比如ls a 現實所有檔案及其隱藏檔案 ls t 按照建立時間排序 ls h 現實檔案內容大小 等等man!聽這名字就有點意思。用法也很簡單。直接終端輸入ma...