對於一些沒做什麼反爬的網站來說
使用簡單的庫三兩下就能把數據爬取下來了
不過
對於一些別人認爲比較重要的數據來說
可就沒有那麼容易了
他們認爲這些數據很重要但是又不得不展示給客戶
所以只能想盡辦法
比如:
對方是如何喪心病狂的通過 css 加密讓你爬不到數據的
python爬蟲反反爬 | 像有道詞典這樣的 JS 混淆加密應該怎麼破
有人說對於這些前端所搞的事情
用 selenium 或者 Puppeteer 不就得了
它們確實很強大
不過終究還是需要瀏覽器配合
比起直接通過請求數據獲取
速度和性能都沒那麼好
有人開玩笑說我 TM 本來是搞爬蟲的怎麼搞着搞着變成搞前端了
對於一些簡單的網站
直接用 python 幾行代碼就輕鬆搞定了
而對於一些用 JS 混淆的網站就需要去分析了
簡單點的 JS 加密函數可以使用 Python 模擬相關的函數
比如我們玩過的那個有道詞典的
就是模擬 hash 的加密函數
那麼對於一些比較複雜的 JS 混淆可就沒那麼簡單了
一般情況下沒那麼容易通過 Python 去模擬
那有什麼方法呢?接下來就是學習python的正確姿勢
既然我們無法簡單的使用 Python 去模擬 JS 操作
那麼有沒有可能
把那些難以理解的 JS 代碼
直接給拉下來
然後使用 Python 去運行它們呢?
也就是說使用 Python 運行那些難以理解的 JS 代碼然後得到我們要的結果
答案是有的
Python 有這樣的庫
使用它們就可以來執行 JS 代碼
今天就給你介紹幾個這樣的庫
通過它們你就可以把你分析到的關鍵 JS 代碼然後扔給它們,一頓執行拿到你要的結果
js2py
這個庫很輕量是基於 ECMAScript 實現的來具體感受一下它的用處吧
安裝
pip install js2py
然後就可以使用
js2py.eval_js()
來執行 js 的語句了
比如
除了這樣之外
還可以直接在 JS 代碼裏面執行 Python 代碼
比如我們可以在 JS 使用 python 的 requests 庫
來請求我們的 vip 網站
並且讓它返回響應狀態碼
可以看到在這裏返回了 200說明可用
很 nice 啊
此外還可以將 js 文件轉化爲 python
PyV8
PyV8 是 Google 家的V8是 Google 開源的 JS 引擎
根據你的系統在以下鏈接下載 V8
https://github.com/emmetio/pyv8-binaries
將文件解壓下來
放進你 python 環境下的 site-packages 中
將 .so 後綴的文件改成 _PyV8.so
如果你不知道你的 site-packages 在哪裏
可以這樣查詢
然後你就可以愉快的使用 PyV8 了
import PyV8ctxt = PyV8.JSContext() #獲取對象ctxt.enter() #調用js前需要調用這個函數result = ctxt.eval(js) #執行JSctxt.leave() #執行完畢
PyExecJS
這個庫需要運行在一定 js 環境下才能使用比如我們剛剛說的 Google 的 V8比如 node.js
雖然這個庫作者不再維護不過還是可以使用的
使用 pip 即可安裝
pip install PyExecJS
使用例子是這樣的
>>> import execjs>>> execjs.eval("'red yellow blue'.split(' ')")['red', 'yellow', 'blue']>>> ctx = execjs.compile("""... function add(x, y) {... return x + y;... }... """)>>> ctx.call("add", 1, 2)3
ok 以上就是使用 Python 運行 JS 的主要內容 希望對你有幫助
那麼我們下回再見
peace