2016-12-07 9 views
0

BeautifulSoupを使用してHTMLソースコードからJavaScriptのvar値を取得しようとしています。例えばBeautifulSoupを使用してPythonを使用してHTMLソースでJS var値を取得

私が持っている:

<script> 
[other code] 
var my = 'hello'; 
var name = 'hi'; 
var is = 'halo'; 
[other code] 
</script> 

私はvarの値を返すために何かをしたい "私の" Pythonの

どのように私はそれを達成することができますか?

import re 

from bs4 import BeautifulSoup 

data = """ 
<script> 
[other code] 
var my = 'hello'; 
var name = 'hi'; 
var is = 'halo'; 
[other code] 
</script> 
""" 

soup = BeautifulSoup(data, "html.parser") 

pattern = re.compile(r"var my = '(.*?)';$", re.MULTILINE | re.DOTALL) 
script = soup.find("script", text=pattern) 

print(pattern.search(script.text).group(1)) 

プリントhello

答えて

1

最も単純なアプローチはBeautifulSoup介して素子を配置するために、両方の正規表現パターンを使用して、所望のサブストリングを抽出することです。

1

もう一つのアイデアは、JavaScriptのパーサーを使用して変数宣言ノードを見つけ、所望の値のものとイニシャライザを抽出する識別子をチェックすることであろう。 slimit parserを使用した例:

from bs4 import BeautifulSoup 
from slimit import ast 
from slimit.parser import Parser 
from slimit.visitors import nodevisitor 


data = """ 
<script> 
var my = 'hello'; 
var name = 'hi'; 
var is = 'halo'; 
</script> 
""" 

soup = BeautifulSoup(data, "html.parser") 

script = soup.find("script", text=lambda text: text and "var my" in text) 

# parse js 
parser = Parser() 
tree = parser.parse(script.text) 
for node in nodevisitor.visit(tree): 
    if isinstance(node, ast.VarDecl) and node.identifier.value == 'my': 
     print(node.initializer.value) 

プリントhello

関連する問題