日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...

發布時間:2023/12/10 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你已經知道了對方是

如何自定義字體加密的了

你要想去反反爬

你就要先站在對方的角度去思考問題

有句話這么說來著

“知己知彼,才能那啥”

那么對于像貓眼電影、大眾點評等等

那樣的 css 自定義字體加密

應該怎么破呢?

接下來就是

學習 python 的正確姿勢

有人說了

不就是把字體通過 unicode 編碼嗎?

那就簡單了啊

把每個字的編碼找到

然后使用字典把編碼和對應的字對應起來

抓取分析的時候

直接替換不就得了

有道理是有道理

但是

如果我每次返回給你的編碼都不一樣呢?

你說死不死

好了好了,先別哭得那么舒服

我們來看看天貓電影票房榜單的頁面

https://maoyan.com/board/1

正如你所看到的那樣

這里也使用了字體加密

通過源代碼我們可以看到

font-face這里制定了字體文件路徑

還是熟悉的配方

熟悉的味道~

不過小老弟

還是不要開心太早

刷新幾次你就會發現

(盯著下圖 2 秒鐘)

看到沒有

字體文件一直在變

woc!

玩呢?

我們先把字體文件下載下來#?把整個頁面搞下來

url?=?'https://maoyan.com/board/1'

html?=?download_html(url).decode('utf-8')

用正則把字體文件名拿一下font_file_name?=?re.findall(r'//vfile.meituan.net/colorstone/(w+.woff)',?html)[0]

拿到了文件名之后就構建一下url

然后把字體文件下載下來url?=?'http://vfile.meituan.net/colorstone/'?+?font_file_name

font_file?=?download_html(url)

接著把字體文件寫到本地文件中with?open('fonts/'?+?font_file,?'wb')?as?f:

f.write(new_file)

使用 fontTools 來獲取字體

如果你之前沒安裝的話要安裝才能用

接著我們把字體文件保存為 xmlfont?=?TTFont('fonts/'?+?font_file)

font.saveXML('./'+font_file+'.xml')

快打開打開看看

哇,這些玩意

有點眼熟啊

這不就是加密的 unicode 碼么

左邊的 id 難道就是對應的數字?

恩沒那么簡單

就能找到聊得來的伴

尤其是在看過了那么多背叛

總是....

不好意思

走錯片場了

回到我們剛剛的 xml 文件

往下拉一下

可以看到這個

這里每一個編碼都對應一個 TTGlyph 對象

從各種 x y 坐標可以猜測

它應該是用來繪制一個字的

我們把任意一個對象復制一下

然后用 matplotlib 根據坐標畫個圖試試看import?matplotlib.pyplot?as?plt

import?re

str?=?""""

.....此處省略一點代碼

"""

x?=?[int(i)?for?i?in?re.findall(r'運行一波

哈哈

媽的,uniEA78 就是 3 !

那么其它的編碼也是這個道理了

還記得 python爬蟲20 | 小帥b教你如何識別圖片驗證碼 嗎?

我們把那十個編碼都畫一遍

然后識別成數字

再封裝成字典不就好了?

好像這樣做效率不高耶

有沒有別的什么辦法呢

我們再請求一下貓眼的字體文件

這次返回的文件又不同了

打開你會發現

返回的編碼都不一樣了

咋整捏

還記得我們剛剛繪制的 3 么?

我們來搜一下新下載的文件

是不是繪制 3 的坐標也是一樣的呢

嘿嘿

仔細看下上面兩張圖里面的坐標

居然一模一樣

也就是說

雖然編碼的名稱不同

但是

它們對象里面對應的內容是一樣的

對不對?

靈感來了

就是這里了

從這里下手

我們在第一次請求字體文件的時候

把編碼對應的數字先給找出來

然后記下來

那么以后再請求到不同的字體文件的時候

雖然得到的編碼不同

但是我們可以根據對象對應的內容進行判斷

從而就可以得出

新的編碼和舊的編碼指向同一個內容

那么這兩個編碼對應的數字就是一樣的

代碼走起~

第一次請求獲取一個字體文件

打開 xml 獲取到 unicode 編碼

接著你可以通過繪制圖的方式

或者通過 fontCreator 軟件打開字體文件

或者通過字符去比對每個 unicode 代表的數字

然后

你就可以得到相應的數字

把它寫到字典里面去

因為每次請求得到的字體編碼都不同

所以上面這個就要作為我們的判斷依據

當我們再請求的時候

如果得到的是和我們一開始請求

得到的字體文件一樣的話

那就直接返回我們剛剛的字典

不相同的話

我們就要把新的字體文件下載下來

然后對每個編碼的對象跟舊的字體文件的每個編碼的對象比較

如果對象是相同的話

就把舊的編碼所對應的數字賦給新的編碼

因為網頁上顯示的是 這樣開頭的

所以我們也要跟著換一下

這時候運行

就會得到新的編碼和對應的數字了

爽啊

有了這個之后

我想爬取具體數據對你來說不在話下了吧

這里就隨便獲取一個電影的實時票房來舉例

簡單粗暴的使用下正則

爬取到編碼的時候我們轉化一下

就是當編碼和字典列表里面的編碼有相同的

就替換成數字

運行之后

看下網頁

沒毛病

再爬取下總票房試試

ok

依然沒毛病

總結

以上是生活随笔為你收集整理的python爬虫反爬对抗_python爬虫反反爬,你几乎可以横扫大部分 css 字体加密的网站...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。