盤點(diǎn)3個(gè)可以操作JavaScript的Python庫(kù)
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
前言
我們都知道Python可以很輕松的實(shí)現(xiàn)某些功能,而且還可以編寫網(wǎng)頁(yè),比如Remi,Pysimplegui,但是操作JavaScript這種瀏覽器的腳本語(yǔ)言,還是第一次聽說(shuō),小編也是第一次聽說(shuō),于是就跟大家腦補(bǔ)這一知識(shí)。
一、PyExecJS
是一個(gè)可以執(zhí)行JavaScript腳本的Python模塊,可以與網(wǎng)頁(yè)上的JavaScript進(jìn)行交互,這樣就能更加精準(zhǔn)的獲取到網(wǎng)頁(yè)中的加密內(nèi)容,如果用Python中的網(wǎng)絡(luò)模塊進(jìn)行請(qǐng)求,會(huì)無(wú)法解密文檔中的加密內(nèi)容,這個(gè)時(shí)候使用我們的PyExecJS可以很方便到的解密網(wǎng)頁(yè)中的加密內(nèi)容,當(dāng)然這得你會(huì)Js逆向才可以。不過(guò)要想PyExecJS解析JS語(yǔ)句沒(méi)毛病,還得整個(gè)Js語(yǔ)言解析環(huán)境,這里推薦NodeJS,尷尬。我們來(lái)看下PyExecJs的用法:
1.常規(guī)操作
import execjsaa=execjs.eval("'one|two|three'.split('|')") #執(zhí)行JavaScript代碼,將字符串分割形成數(shù)組print(aa)e=execjs.compile(''' #編譯一個(gè)表達(dá)式function add(x,y){return x+y;}''')print(e.call('add',10,20))#調(diào)用編譯好的函數(shù)并且賦值

也可以通過(guò)獲取引擎來(lái)運(yùn)行我們的語(yǔ)句,如下:
print(execjs.get().eval('1+1'))2.查看解釋引擎
print(execjs.get().name)
這里JavaScript的解釋引擎是JScript,我們還可以使用自己指定給力的引擎,比如“Nodejs”。
3.指定引擎
import execjsimport osos.environ["EXECJS_RUNTIME"] = "Node"print(execjs.get().name)

也可以手動(dòng)指定引擎,如下:
js1=execjs.get(execjs.runtime_names.JScript)print(js1.eval('1'))js2=execjs.get(execjs.runtime_names.Node)print(js2.eval('2'))

二、Js2Py
這個(gè)我覺(jué)得算是比較好的了,可以說(shuō)是一個(gè)綜合體,它不需要依賴別的環(huán)境,可以獨(dú)立運(yùn)行Js文件,只不過(guò)它的運(yùn)行速度可能會(huì)稍微慢一點(diǎn)而已,但是這都不叫事。下面我們來(lái)看看它有哪些神器的功能吧。
1.常規(guī)操作,必須的

2.循環(huán)遍歷
import js2pyaa=js2py.eval_js('''var i=0;for(var c=1;c<6;c++){console.log(c);}''')print(aa)

3.讀取Js文件
我們可以把JS文件寫入文件中,以便我們進(jìn)行調(diào)用,如下:
1.js
function f(aa){if(aa>11){console.log('OK')}else{console.log('Fail')}}
Python文件
import js2pywith open('1.js','r') as f:aa=js2py.eval_js(f.read())print(aa(11))

4.爬取網(wǎng)站數(shù)據(jù)
這里我們以淘寶為主,我想整它的JS腳本文件,如下:
import execjsimport requestsimport reurl = 'https://ai.taobao.com/?pid=mm_26632323_6762370_25910879'res=requests.get(url).textjs=re.findall(r'<script>(.*?)</script>',res)print(js,'\n')js1=re.sub(r'eval\(','return(',js[0])html="function getLego2WPK(){" + js1 + "};"ctx = execjs.compile(html)temp = ctx.call('getLego2WPK')print(temp)

三、PyV8
基于Google的V8引擎打造,遺憾的是目前只支持Python2版本,而且已不再維護(hù),建議Python2的小伙伴可以去試試。
四、總結(jié)
本文主要盤點(diǎn)了3個(gè)可以操作JavaScript的Python庫(kù),分別是PyExecJS、Js2Py和PyV8,只要我們用好了這些模塊以后玩爬蟲就能更加技高一籌,并且準(zhǔn)確率更高了。
------------------- End -------------------
往期精彩文章推薦:
手把手教你用Scrapy爬蟲框架爬取食品論壇數(shù)據(jù)并存入數(shù)據(jù)庫(kù)
一篇文章淺析Python自帶的線程池和進(jìn)程池
手把手教你在Windows下設(shè)置分布式隊(duì)列Celery的心跳輪詢

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~
