## 在2020年的某一天,一個好好的前端開發,硬生生的搞成了爬蟲開發,還是個不會python,只會nodejs的爬蟲,太難了。
最開始做爬蟲的時候,是按着前端開發所見到的來的。想着不過是調用調用再調用接口而已。直到我接觸到了幾個互聯網大佬的公司,才發現事情並不簡單。
第一個目標是一個公開的排行榜,很簡單,只限制了請求頻率,不超過這個頻率,就是調用調用接口而已。
第二個目標也是一個公開的表單,只是數據不在接口裏,而是在直接返回的原文件裏。因爲nodejs裏沒有dom
操作,所以需要借用別的工具 cheerio
,手感有點像jQuery
。這個目標也不難,只需要研究好了這個網頁的dom
結構就好了。
第三個目標是一個需要登陸才能看到的數據,這裏我先正常登陸,在開發者工具頁面獲取到token
,再帶上token
去請求想要的數據,也…… 不是太麻煩,但是一開始沒注意token是會失效的,過了幾天再去看數據發現都爬到,因爲token失效了。所以如果想要完全自動化,需要判斷token
是否失效,然後再自動登陸。
第四個目標就開始麻煩,還不是一般的麻煩——字體加密,去搜“爬蟲 字體加密”,最典型的就是大衆點評了。
大衆點評的頁面看上去工工整整,看上去很好處理,打開開發者工具,發現數據是直接返回在html中的,所以得用上cheerio
。但是仔細一看。
是我電腦出問題了嗎?爲什麼都是
呢?在通過檢查元素看一下這些
到底是啥。
像極了我用iconfont
的樣子。
找到字體文件,下載字體文件,然後打開百度字體編輯器,上傳下好的woff
文件。(其實我用safari打開網友上傳woff文件會報錯,要先轉換成ttf纔行)
可以看到一個碼對應一個字,可以自己扣一個字典出來。但是如果真要扣的話…… 要自己一個個手寫,這一個woff文件就是600多個字,而這些字實際上是svg,不能複製只能手敲。因爲只是體驗一下,所以放棄了地址,只瞄準數字,10個字符而已,手打也不過如此。做好字典以後,就如第二個目標一樣,用cheerio
獲取dom內容,然後將dom裏的那些unicode
按着字典一個個替換。然後,然後就完事啦!然而,事情並沒有那麼簡單…… 這該死的字體竟然會更換的!雖然不太清楚頻率(我遇到的第二天就換了),但是就算只扣10個字,天天扣,那也足夠傻了。
再搜了不少資料後,發現python
有個fonttools,然而我不會!繼而去npm上搜,搜到了一個node-fonttools,其本質還是調用python
,只是進行了一下封裝,可以方便的給js來用。之後就是找到css,下載裏面引用的字體包,然後將字體包丟給node-fonttools
,讓其識別文字,再提煉出字典,再進行上面的操作。
在一些別的爬蟲項目中,還遇到過對ip限制特別嚴格的情況,在這個情況下就需要自己弄個ip池,請求一兩下就換個ip繼續搞。用來識別用戶的還有user-agent
,這也可以弄個池子,請求一次換一個。而對那些需要用戶登陸才能訪問的數據,在某些情況下,還需要有個用戶的池子。這些東西都是爲了不讓對方認出來並且攔住我的請求。
在學習爬蟲的過程中,還遇到過一些公司對自家數據安全一點也不放在心上…雖然對爬蟲開發的我來說是件好事,但是對前端開發和也寫點後端內容的我來說,也確實是警鐘,讓我對數據安全、反爬蟲這方面又漲了點知識。