2010-12-28 8 views
2
<html> 
<head> 
    <script type="text/javascript"> 
    document.write('<a href="http://www.google.com">f*** js</a>'); 
    document.write("f*** js!"); 
    </script> 
</head> 
<body> 
    <script type="text/javascript"> 
    document.write('<a href="http://www.google.com">f*** js</a>'); 
    document.write("f*** js!"); 
    </script> 
<div><a href="http://www.google.com">f*** js</a></div> 
</body> 
</html> 
私は一つだけのJSによって生成されません取得

ジャバスクリプト対応のHTMLパーサ〜

In [1]: import lxml.html as H 

In [2]: f = open("test.html","r") 

In [3]: c = f.read() 

In [4]: doc = H.document_fromstring(c) 

In [5]: doc.xpath('//a') 
Out[5]: [<Element a at a01d17c>] 

In [6]: a = doc.xpath('//a')[0] 

In [7]: a.getparent() 
Out[7]: <Element div at a01d41c> 

私は上記のhtmlページ内のすべてのlableのオブジェクトをキャッチするためにXPathを使用したい...〜 Firefoxのxpathチェッカーですべてのlableを見つけることができます!

http://i.stack.imgur.com/0hSug.png

それをどのように行うには? thx〜!

<html> 
<head> 
</head> 
<body> 
<script language="javascript"> 
function over(){ 
a.innerHTML="mouse me" 
} 
function out(){ 
a.innerHTML="<a href='http://www.google.com'>google</a>" 
} 
</script> 
<body><li id="a"onmouseover="over()" onmouseout="out()">mouse me</li> 
</body> 
</html> 
+3

これは何も役に立ちませんでした。 –

+1

HTMLを解析する前にjsを解析して解釈する必要があります。 http://www.crummy.com/software/BeautifulSoup/を見たことがありますか? –

+0

あなたのjavascriptは、与えられたように意味がありません - ドキュメントの頭にリンクを書いていますか? lxmlの観点からは、document.writeの中の何かは文字列定数であり、解析されるものではありません。 –

答えて

1

Pythonでjavascript対応パーサーについての手掛かりはありませんが、ANTLRを使用してそのジョブを実行できます。アイデアは私のものではないので、私はあなたにlinkを残しています。

パーサーを最適化して、どの命令を解析して実行する必要があるのか​​を選択できるので、実際にはかなりクールです。

+0

ニース!そして同じ質問からリンクしたhttp://pypi.python.org/pypi/python-spidermonkey/も考慮に値すると思われます。 – redShadow

0

Javaの場合はCobraです。私は、Python用のJavascript対応のHTMLパーサーを知らない。

0

"javascriptスタンドアロンランタイム"についてgoogleを検索したところ、jslibs: "ライブラリ"というGeckoのJavaScriptエンジンに基づいて、 "JavaScriptを汎用スクリプト言語として使用するためのスタンドアロンJavaScript開発ランタイム環境"を発見しました。

いいですね!私はまだテストしていませんが、これはあなたがページで見つけたjavascriptコードを実行できるように思われます。しかし、どのくらい難しいかはわかりません。

+0

これは単なる言語バインディングですが、持っていませんDOM APIほとんどの現実世界のjavascriptはまだそれで動作しません。必要な部分をすべて追加するまでには、ブラウザが必要になります。または、私が知っている最も近いことは[HtmlUnit](http://htmlunit.sourceforge.net/)です。 – Keith