2012-04-13 18 views
30

xpathを使用してクロールしているHTML Webページがあります。特定のノードのetree.tostringは私にこの文字列を与える:PythonからJavascriptを実行

<script> 
<!-- 
function escramble_758(){ 
    var a,b,c 
    a='+1 ' 
    b='84-' 
    a+='425-' 
    b+='7450' 
    c='9' 
    document.write(a+c+b) 
} 
escramble_758() 
//--> 
</script> 

私はちょうどescramble_758()の出力を必要とします。全体を理解するための正規表現を書くことができますが、コードを整理しておきたいのです。何が最良の選択肢ですか?

私は以下のライブラリを圧縮していますが、正確な解決策はありませんでした。彼らのほとんどはブラウザをエミュレートしようとしており、カタツムリが遅くなっています。 例になります。

編集(はっきりit's not yet possible to call a function defined in Javascript氏は述べています) (ベアボーンがやる)

+0

待ちを:インストールする

。これは詐欺ですか?または、誰かが答えを削除したとしても、パジャマが間違っていましたか? –

+1

[PhantomJS](http://code.google.com/p/phantomjs/)が助けてもいいですか[pyv8](http://code.google.com/p/pyv8/)。 – RanRag

+0

@ErikReppenパジャマを調べましたが、例はありません。 – jerrymouse

答えて

28

PyV8、私はこれを行うことができます。しかし、document.writereturnに置き換える必要があります。なぜなら、DOMが存在しないため、documentがないからです。

import PyV8 
ctx = PyV8.JSContext() 
ctx.enter() 

js = """ 
function escramble_758(){ 
var a,b,c 
a='+1 ' 
b='84-' 
a+='425-' 
b+='7450' 
c='9' 
document.write(a+c+b) 
} 
escramble_758() 
""" 

print ctx.eval(js.replace("document.write", "return ")) 

それとも、あなたはまた、純粋なPythonで書かれたとのpythonにJavaScriptを実行し、翻訳することの両方が可能ですされているJs2Pyを使用することができますモックドキュメントオブジェクト

class MockDocument(object): 

    def __init__(self): 
     self.value = '' 

    def write(self, *args): 
     self.value += ''.join(str(i) for i in args) 


class Global(PyV8.JSClass): 
    def __init__(self): 
     self.document = MockDocument() 

scope = Global() 
ctx = PyV8.JSContext(scope) 
ctx.enter() 
ctx.eval(js) 
print scope.document.value 
+0

PyV8をインストールするにはどうすればいいですか? 'python setup.py install 'を実行すると、私は_ERRORを取得します.V8_HOMEをGoogle v8フォルダに設定するか、最初にダウンロードしてビルドする必要があります。 _このプロジェクトにアクセスすると、ベンチマーク-v2.zip benchmarks-v1.zipという2つのダウンロードが表示されます。いずれもpyファイルを持っていません。 – jerrymouse

+0

私はWindowを使用しているので、exeインストーラを使用します。他のプラットフォームにインストールする方法についてはわかりません。 – Dikei

+3

私はマックです。時には窓がとても冷たいです。 – jerrymouse

18

を作成することができます。ラベル、ゲッター、セッターなどほとんど使われていない機能もほぼすべてのJavaScriptに対応しています。 Js2Pyの

import js2py 

js = """ 
function escramble_758(){ 
var a,b,c 
a='+1 ' 
b='84-' 
a+='425-' 
b+='7450' 
c='9' 
document.write(a+c+b) 
} 
escramble_758() 
""".replace("document.write", "return ") 

result = js2py.eval_js(js) # executing JavaScript and converting the result to python string 

利点は、(基本的にはJavaScriptのpythonに変換されているため)のpythonに移植し、非常に簡単に統合が含まれます。

pip install js2py 
関連する問題