【问题标题】:Finding JavaScript variable with certain string with BeautifulSoup使用 BeautifulSoup 查找带有特定字符串的 JavaScript 变量
【发布时间】:2015-03-23 11:49:13
【问题描述】:

我有一个有点棘手的任务,我需要在 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 foundsn-p/string来查找。后来验证它实际上是一个JS变量,然后我想取值&lt;br /&gt;&lt;table&gt;&lt;/table&gt;以便遍历它。

【问题讨论】:

  • 您希望 someVar 的值根据示例共享为 '
    ' ?
  • @Rakesh_Kumar,也许比这更复杂一些。我必须根据字符串This text has to be found找到JS Var,然后验证它实际上是一个JS变量,然后获取并遍历值'&lt;br/&gt;&lt;table&gt;&lt;/table&gt;'

标签: javascript python parsing beautifulsoup


【解决方案1】:

一种方法是使用 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&lt;br /&gt;&lt;table&gt;&lt;/table&gt;'

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

另见:

【讨论】:

    猜你喜欢
    • 2019-03-17
    • 2016-04-13
    • 2020-05-15
    • 2015-01-22
    • 2011-12-05
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多