聽說你在玩 Python 爬蟲遇到 JavaScript 的時候還在使用 selenium ?

我們在玩爬蟲的時候

對於一些沒做什麼反爬的網站來說
使用簡單的庫三兩下就能把數據爬取下來了

圖片


不過
對於一些別人認爲比較重要的數據來說
可就沒有那麼容易了
他們認爲這些數據很重要但是又不得不展示給客戶
所以只能想盡辦法

比如:
對方是如何喪心病狂的通過 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














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