對於一些沒作什麼反爬的網站來講
使用簡單的庫三兩下就能把數據爬取下來了
不過
對於一些別人認爲比較重要的數據來講
可就沒有那麼容易了
他們認爲這些數據很重要可是又不得不展現給客戶
因此只能想盡辦法
好比:
對方是如何喪心病狂的經過 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() #執行完畢
這個庫須要運行在必定 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