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

咱們在玩爬蟲的時候

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

圖片


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

好比:
對方是如何喪心病狂的經過 css 加密讓你爬不到數據的

python爬蟲反反爬 | 像有道詞典這樣的 JS 混淆加密應該怎麼破




有人說對於這些前端所搞的事情
用 selenium 或者 Puppeteer 不就得了
它們確實很強大
不過終究仍是須要瀏覽器配合
比起直接經過請求數據獲取
速度和性能都沒那麼好




有人開玩笑說我 TM 原本是搞爬蟲的怎麼搞着搞着變成搞前端了





對於一些簡單的網站
直接用 python 幾行代碼就輕鬆搞定了

而對於一些用 JS 混淆的網站就須要去分析了
簡單點的 JS 加密函數可使用 Python 模擬相關的函數


好比咱們玩過的那個有道詞典的
就是模擬 hash 的加密函數

那麼對於一些比較複雜的 JS 混淆可就沒那麼簡單了
通常狀況下沒那麼容易經過 Python 去模擬




那有什麼方法呢?接下來就是學習python的正確姿式
css


既然咱們沒法簡單的使用 Python 去模擬 JS 操做
那麼有沒有可能
把那些難以理解的 JS 代碼
直接給拉下來
而後使用 Python 去運行它們呢?

也就是說使用 Python 運行那些難以理解的 JS 代碼而後獲得咱們要的結果


答案是有的
Python 有這樣的庫
使用它們就能夠來執行 JS 代碼




前端


今天就給你介紹幾個這樣的庫

經過它們你就能夠把你分析到的關鍵 JS 代碼而後扔給它們,一頓執行拿到你要的結果
node



js2py



這個庫很輕量是基於 ECMAScript 實現的來具體感覺一下它的用處吧


安裝

python

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 了


git

import PyV8ctxt = PyV8.JSContext() #獲取對象ctxt.enter() #調用js前須要調用這個函數result = ctxt.eval(js) #執行JSctxt.leave() #執行完畢



圖片


PyExecJS


這個庫須要運行在必定 js 環境下才能使用好比咱們剛剛說的 Google 的 V8好比 node.js

雖然這個庫做者再也不維護不過仍是可使用的
使用 pip 便可安裝
github

 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
相關文章
相關標籤/搜索