使用BeautifulSoup查找具有特定字符串的JavaScript变量

时间:2015-01-24 15:04:09

标签: javascript python parsing beautifulsoup

我有一个棘手的任务,我需要在JavaScript变量中找到一些HTML并遍历它。

变量如下所示:

<script>
var someVar = new something.Something({
    content: 'This text has to be found<br /><table></table>',
    size: 230
)};
....
</script>

我不知道JS变量的名称,因此必须根据This text has to be found代码段/字符串找到它。之后验证它实际上是一个JS变量,然后我想获取值<br /><table></table>以便遍历它。

1 个答案:

答案 0 :(得分:2)

在这种情况下,一种方法是使用 javascript解析器slimit。我们的想法是找到所有脚本标记,迭代它们,解析代码,遍历语法树并检查是否在每个赋值节点的右侧找到了要查找的文本:

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

data = """
<script>
var someVar = new something.Something({
    content: 'This text has to be found<br /><table></table>',
    size: 230
});
</script>
"""
text_to_find = 'This text has to be found'

soup = BeautifulSoup(data)

for script in soup.find_all('script'):
    parser = Parser()
    tree = parser.parse(script.text)
    for node in nodevisitor.visit(tree):
        if isinstance(node, ast.Assign):
            value = getattr(node.right, 'value', '')
            if text_to_find in value:
                print value

打印'This text has to be found<br /><table></table>'

我不确定它是否完全符合您的需求,但希望这至少可以开始。

另见: