欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用js2py庫運行js代碼

 更新時間:2022年05月27日 10:30:41   作者:一秋閑談  
本文主要介紹了thon使用js2py庫運行js代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在日常使用Python做爬蟲,一般會用到以下手段:

  • 請求URL,返回HTML文本,然后通過xpath、css或者re,提取數(shù)據(jù)
  • 有些網(wǎng)頁的數(shù)據(jù)通過AJAX異步請求加載,此時找到對應(yīng)的接口,調(diào)用并直接使用接口返回的數(shù)據(jù)
  • 有時候如果網(wǎng)站反爬或安全機(jī)制比較高時,則會做一些驗證或者加密,比如cookie內(nèi)必須攜帶token等信息,而這些信息是通過混淆過的js代碼計算得出的。

針對1,應(yīng)該是爬取大多數(shù)沒有任何安全機(jī)制并且是靜態(tài)網(wǎng)頁時,常用手段,而2是提取數(shù)據(jù)最為快速的,但是接口并不是總是返回我們最喜歡的json字符串,有可能是一段js代碼定義的變量數(shù)據(jù),針對3則更為頭痛,如果在Python匯總能運行js代碼,則可能會解決掉我們大部分的煩惱,本文即講解一個Python包,用于直接在Python代碼中直接運行js代碼,然后得到我們感興趣的函數(shù)、數(shù)據(jù)或者js代碼運行之后的結(jié)果。

一、js2py庫概述

js2py是眾多可以在Python中運行js代碼比較優(yōu)秀的庫。

安裝js2py方法如下:

pip install js2py

js2py中有以下兩個比較關(guān)鍵的方法:

方法解釋示意
js2py.eval_js(js_string)直接運行含有js代碼的字符串(或js文件),并得出結(jié)果

js_string='var a=10'

js2py.eval_js(js_string) #輸出10

js2py.EvalJs()

生成一個EvalJs對象

可通過該對象的execute方法來運行一段js代碼(或js文件),并得到對應(yīng)的變量和對象(即抑制輸出,得到變量和對象,便于后續(xù)直接使用)

可通過該對象的eval()方法來運行一段js代碼,并得到結(jié)果

js_string='var a=10'

js_obj=js2py.EvalJs()

js_obj.execute(js_string)

js_obj.a #輸出為10

二、抽取js代碼運行結(jié)果

import js2py
string='var db={chars:["a","b","c","d","f","g","h","j","k","m","n","p","q","r","s","t","w","x","y","z"],datas:[["005970","國泰消費優(yōu)選股票","GTXFYXGP","1.9082","1.9082","1.8657","1.8657","0.0425","2.28","開放申購","開放贖回","","1","0","1","","1","0.15%","0.15%","1","1.50%"],["004069","南方中證全指證券公司ETF聯(lián)接A","NFZZQZZQGSETFLJA","1.1438","1.1438","1.1212","1.1212","0.0226","2.02","開放申購","開放贖回","","1","0","2","","1","0.12%","0.12%","1","1.20%"]],count:["9981","3745","1653","4583"],record:"10481",pages:"5241",curpage:"1",indexsy:[-0.04,-0.34,-0.03,],showday:["2021-03-05","2021-03-04"]}'
 
mydict=js2py.eval_js(string) #最后會將string內(nèi)定義的對象,變?yōu)镻ython字典并賦值給mydict
 
string='''
function add(a, b) {
    return a + b
}
'''
myadd=js2py.eval_js(string) #會得到一個add函數(shù)并賦值給myadd,后續(xù)可通過myadd直接調(diào)用
  • 以上第一個string,便是作者在爬取天天基金的基金數(shù)據(jù)時,發(fā)現(xiàn)該網(wǎng)站接口返回的基本都是一個js語句,在該語句內(nèi)定義了返回的數(shù)據(jù),當(dāng)然,如果不通過js2py,也可以將該string通過Python的eval或者exec最終解析成Python字典,但比較繁瑣(大概思路即使用字符串方法,將無用的字符刪除掉,然后將字符串變成一個Python字典的定義格式,最后運行eval或者exec函數(shù)即可)
  • 以上第二個string,即一個字符串,該字符串內(nèi)定義了一個js函數(shù),此時便可以得到該函數(shù)并賦值給Python變量,后續(xù)便可以通過該變量調(diào)用該函數(shù),并且好像是該函數(shù)是在Python內(nèi)部定義的一樣

三、提取js語句內(nèi)變量和對象等

import js2py
js_obj=js2py.EvalJs()
string='''
var a=10
function func(a,b){
    return a*b
}
'''
 
js_obj.execute(string)
js_obj.a #輸出為10
js_obj.func #為func函數(shù)
js_obj.func(3,4) #輸出為12

以上示意,變得更有意思,可以通過execute方法,運行下js代碼,先不輸出結(jié)果,而是得到這里面定義的變量、函數(shù)等,然后把這些作為屬性附加給js_obj對象,后續(xù)便可以通過該對象訪問到這些屬性,這樣會更加直觀和靈活,好像是直接在Python中寫js代碼一樣

四、其他

當(dāng)然,Python還有其他運行js代碼的庫,但是作者感覺js2py整體是最契合Python的,甚至語法都基本沒什么變化,故推薦使用該庫

該庫還有其他很多方法和用途,不過以上是最為常用的場景,讀者如果需要或感興趣,可以進(jìn)一步研究學(xué)習(xí),不顧如果能掌握好以上方法,基本可以滿足90%的日常需要了。

到此這篇關(guān)于python使用js2py庫運行js代碼的文章就介紹到這了,更多相關(guān)python 運行js代碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論