做了下爬蟲,所以記一筆。

## 在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,這也可以弄個池子,請求一次換一個。而對那些需要用戶登陸才能訪問的數據,在某些情況下,還需要有個用戶的池子。這些東西都是爲了不讓對方認出來並且攔住我的請求。

在學習爬蟲的過程中,還遇到過一些公司對自家數據安全一點也不放在心上…雖然對爬蟲開發的我來說是件好事,但是對前端開發和也寫點後端內容的我來說,也確實是警鐘,讓我對數據安全、反爬蟲這方面又漲了點知識。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章