最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用js2py庫運行js代碼

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

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

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

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

一、js2py庫概述

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

安裝js2py方法如下:

pip install js2py

js2py中有以下兩個比較關鍵的方法:

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

js_string='var a=10'

js2py.eval_js(js_string) #輸出10

js2py.EvalJs()

生成一個EvalJs對象

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

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

js_string='var a=10'

js_obj=js2py.EvalJs()

js_obj.execute(js_string)

js_obj.a #輸出為10

二、抽取js代碼運行結果

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內定義的對象,變?yōu)镻ython字典并賦值給mydict
 
string='''
function add(a, b) {
    return a + b
}
'''
myadd=js2py.eval_js(string) #會得到一個add函數(shù)并賦值給myadd,后續(xù)可通過myadd直接調用
  • 以上第一個string,便是作者在爬取天天基金的基金數(shù)據(jù)時,發(fā)現(xiàn)該網站接口返回的基本都是一個js語句,在該語句內定義了返回的數(shù)據(jù),當然,如果不通過js2py,也可以將該string通過Python的eval或者exec最終解析成Python字典,但比較繁瑣(大概思路即使用字符串方法,將無用的字符刪除掉,然后將字符串變成一個Python字典的定義格式,最后運行eval或者exec函數(shù)即可)
  • 以上第二個string,即一個字符串,該字符串內定義了一個js函數(shù),此時便可以得到該函數(shù)并賦值給Python變量,后續(xù)便可以通過該變量調用該函數(shù),并且好像是該函數(shù)是在Python內部定義的一樣

三、提取js語句內變量和對象等

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代碼,先不輸出結果,而是得到這里面定義的變量、函數(shù)等,然后把這些作為屬性附加給js_obj對象,后續(xù)便可以通過該對象訪問到這些屬性,這樣會更加直觀和靈活,好像是直接在Python中寫js代碼一樣

四、其他

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

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

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

相關文章

  • 解決Python使用列表副本的問題

    解決Python使用列表副本的問題

    今天小編就為大家分享一篇解決Python使用列表副本的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Pandas:DataFrame對象的基礎操作方法

    Pandas:DataFrame對象的基礎操作方法

    今天小編就為大家分享一篇Pandas:DataFrame對象的基礎操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python3+PyQt5泛型委托詳解

    python3+PyQt5泛型委托詳解

    這篇文章主要為大家詳細介紹了python3+PyQt5泛型委托的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • python文件的讀取、寫入與刪除

    python文件的讀取、寫入與刪除

    文件是無處不在的,,無論我們使用哪種編程語言,處理文件對于每個程序員都是必不可少的,下面這篇文章主要給大家介紹了關于python文件的讀取、寫入與刪除的相關資料,文中通過實例代碼和圖文介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • python可視化之顏色映射詳解

    python可視化之顏色映射詳解

    Python的可視化有很多種,這篇文章主要介紹了Python可視化的顏色映射,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python在Windows和在Linux下調用動態(tài)鏈接庫的教程

    Python在Windows和在Linux下調用動態(tài)鏈接庫的教程

    這篇文章主要介紹了Python在Windows和在Linux下調用動態(tài)鏈接庫的教程,在進行Python的CS端編程時經常需要用到,需要的朋友可以參考下
    2015-08-08
  • 解決Django migrate No changes detected 不能創(chuàng)建表的問題

    解決Django migrate No changes detected 不能創(chuàng)建表的問題

    今天小編就為大家分享一篇解決Django migrate No changes detected 不能創(chuàng)建表的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python字典高級用法深入分析講解

    Python字典高級用法深入分析講解

    字典作為Python的一個內置數(shù)據(jù)結構,和列表一樣都是可變序列的,但是它是無序的,以鍵值對的方式存儲數(shù)據(jù)。本文將詳解一下Python中字典的高級使用,需要的可以參考一下
    2022-10-10
  • Python多進程編程multiprocessing代碼實例

    Python多進程編程multiprocessing代碼實例

    這篇文章主要介紹了Python多進程編程multiprocessing代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • python開發(fā)利器之ulipad的使用實踐

    python開發(fā)利器之ulipad的使用實踐

    Ulipad是一個國人limodou編寫的專業(yè)Python編輯器,它基于wxpython開發(fā)的GUI(圖形化界面)。下面這篇文章主要介紹了python開發(fā)利器之ulipad的使用實踐,文中介紹的非常詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03

最新評論

泽州县| 普陀区| 张家港市| 宜宾市| 娄烦县| 潜山县| 潜江市| 双桥区| 承德县| 临沂市| 雷州市| 肇庆市| 吉水县| 克什克腾旗| 青冈县| 青河县| 湟源县| 三亚市| 曲阜市| 洛宁县| 砚山县| 百色市| 梅河口市| 调兵山市| 洪泽县| 临汾市| 景宁| 离岛区| 阜康市| 探索| 石门县| 伊春市| 建湖县| 肥城市| 茌平县| 乌兰察布市| 贵阳市| 郎溪县| 定西市| 栖霞市| 宜州市|