猫眼爬虫三-终极篇:破解滑动验证,动态字体加密
前面兩節(jié)我們對(duì)貓眼網(wǎng)站進(jìn)行了爬取,中間,我們會(huì)遇到各種反爬蟲,包括滑動(dòng)驗(yàn)證和字體加密等等,今天,我們就對(duì)這些反爬蟲進(jìn)行一一破解,實(shí)現(xiàn)貓眼網(wǎng)站的全信息爬取!
1、滑動(dòng)驗(yàn)證:滑動(dòng)驗(yàn)證類似于極驗(yàn)證(滑塊驗(yàn)證,電腦的B站登陸要滑動(dòng)的哪個(gè)),但是原理不一樣,目前來說,12306的相關(guān)搶票的腳本已經(jīng)實(shí)現(xiàn)了自動(dòng)加載滑塊滑動(dòng),但大多數(shù)情況還得手動(dòng),在這里也是。
破解流程:
1、先嘗試著獲取數(shù)據(jù),如果遇到爬取鏈接與實(shí)際鏈接不一致,如下圖:
即爬取的鏈接和實(shí)際鏈接不一致時(shí),尤其是出現(xiàn)了類似于:
https://verify.meituan.com/v2/web/general_page?action=spiderindefence&requestCode=350941fd3ea345bd99f8e17f7f99f2f5&platform=1000&adaptor=auto&succCallbackUrl=https%3A%2F%2Foptimus-mtsi.meituan.com%2Foptimus%2FverifyResult%3ForiginUrl%3Dhttp%253A%252F%252Fmaoyan.com%252Ffilms%252F224973
這樣的鏈接,那么就是被反爬蟲了,不需要慌,只要點(diǎn)擊該鏈接,
人工拖動(dòng)該滑塊,使之驗(yàn)證成功,那么ip就通過了驗(yàn)證,后面就可以成功爬取了。如下圖:
下面是出現(xiàn)滑動(dòng)驗(yàn)證的操作示意gif
上面,我們將滑動(dòng)驗(yàn)證說清楚了,下面我們開始對(duì)字體加密進(jìn)行分析:點(diǎn)開貓眼電影的詳情,我們?cè)?檢查 中發(fā)現(xiàn):
他的評(píng)分人數(shù),評(píng)分,票房等相關(guān)信息都是無法顯示的,在源代碼中也是類似,那么,我們應(yīng)該怎么獲取相關(guān)的數(shù)據(jù)呢?百度相關(guān)的信息,我們發(fā)現(xiàn):
他采用了一種字體加密方式,且是動(dòng)態(tài)的,每次刷新,都要重新載入一種新的字體,如下圖:
因此,我們不能再采取網(wǎng)上的那種固定的識(shí)別文字的方式,必須采取動(dòng)態(tài)識(shí)別方式!這里,我們用到的是OCR本地文字識(shí)別,主要通過 tesseract 來識(shí)別保存在本地的數(shù)字符號(hào)。
ocr識(shí)別流程:
1、先配置好tesseract的環(huán)境和訓(xùn)練庫,導(dǎo)入相關(guān)的包。
?2、下載網(wǎng)頁的字體文件,保存在本地文件夾。
3、將本地的字體坐標(biāo)進(jìn)行讀取,并轉(zhuǎn)化成黑白圖片。
4、進(jìn)行ocr識(shí)別,并將結(jié)果進(jìn)行轉(zhuǎn)化,將每個(gè)坐標(biāo)對(duì)應(yīng)數(shù)字識(shí)別代碼,?如下圖
5、找到對(duì)應(yīng)的識(shí)別代碼之后,我們就可以在源代碼中進(jìn)行替換操作了:
將識(shí)別出來的數(shù)字與字體代碼進(jìn)行轉(zhuǎn)換。
6、轉(zhuǎn)換成功后進(jìn)行數(shù)據(jù)的獲取就可以了。
OCR識(shí)別的缺點(diǎn):
1、對(duì)訓(xùn)練庫的要求比較高,否則識(shí)別很容易出錯(cuò),不準(zhǔn)確。
2、識(shí)別時(shí)間較長(zhǎng),時(shí)間花費(fèi)較大。
但就目前來說,我的識(shí)別訓(xùn)練庫的精度和速度都還可以。
知道了爬蟲步驟與方法,我們就可以編寫代碼了,代碼流程與前兩節(jié)類似,這里主要講解一下怎么把字體文件等轉(zhuǎn)化成圖片識(shí)別。
1、首先,導(dǎo)入下面這些庫:
import pytesseract from PIL import Image from fontTools.ttLib import TTFont from matplotlib import pyplot as plt在OCR識(shí)別之前,記得先下好字體文件,再進(jìn)行后面操作。
2、導(dǎo)入字體文件,獲取到數(shù)字的坐標(biāo)表示區(qū):
font = TTFont(woff_file) font_name = font.getGlyphOrder()[2:] #獲取到字符的uni碼 zb = [font['glyf'][i].coordinates for i in font_name
獲取到每個(gè)字體的坐標(biāo)信息,后面我們就可以根據(jù)字體坐標(biāo)進(jìn)行繪圖,并將字體編碼與具體數(shù)字對(duì)應(yīng)上;部分代碼如下:
全部代碼在我的公眾號(hào)里,回復(fù) 貓眼 就可以獲取到,我的公眾號(hào)名字是:
python學(xué)習(xí)號(hào)
當(dāng)然,也可以在這里 下載 ,只是要c幣。
歡迎大家關(guān)注。一個(gè)python學(xué)習(xí)者,將其學(xué)到的分享出來。
總結(jié)
以上是生活随笔為你收集整理的猫眼爬虫三-终极篇:破解滑动验证,动态字体加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DES密码 中 S盒的代码实现
- 下一篇: maven依赖查看