【发布时间】:2017-09-08 07:51:35
【问题描述】:
我想解析以下从 HTML 页面中抓取的 javascript:
var ibmdebug = false; //indicates whether or not to display flash debug window
if (qsParse.get("debug") == "true") {
ibmdebug = true;
}
var matchStatsConfig = {
courtId : "B",
matchId : "5126",
matchStatus : "C"
,
eventId : "MX",
roundId : "1",
dayMessage : "Day 5 Friday 7 July",
relatedContentTags : ['atpi200','wta316629','atpba79','wta316713'],
team1 : {
a : "atpi200",
a_name : "D. Inglot",
a_seed : "",
b : "wta316629",
b_name : "L. Robson",
b_seed : ""
},
team2 : {
a : "atpba79",
a_name : "A. Begemann",
a_seed : "",
b : "wta316713",
b_name : "N. Melichar",
b_seed : ""
}
}
基于this thread,我使用包slimit如下,其中js.text包含javascript代码作为字符串:
data = js.text
parser = Parser()
tree = parser.parse(data)
fields = {getattr(node.left, 'value', ''): getattr(node.right, 'value', '')
for node in nodevisitor.visit(tree)
if isinstance(node, ast.Assign)}
print(fields)
fields 的输出/内容如下所示
{
'ibmdebug': 'true',
'courtId': '"B"',
'matchId': '"5126"',
'matchStatus': '"C"',
'eventId': '"MX"',
'roundId': '"1"',
'dayMessage': '"Day 5 Friday 7 July"',
'relatedContentTags': '',
'team1': '',
'a': '"atpba79"',
'a_name': '"A. Begemann"',
'a_seed': '""',
'b': '"wta316713"',
'b_name': '"N. Melichar"',
'b_seed': '""',
'team2': ''
}
如您所见,它没有被正确解析(只有部分正确)。数组 relatedContentTags 保持为空,team1 和 team2 对象/字典也是如此。有趣的是,team2 变量的内容就在那里。我假设是这种情况,因为team1 的内容也被解析,但被team2 的内容覆盖。
我的问题是:如何正确地将初始 javascript 解析为 python 数据结构(例如字典)?
【问题讨论】:
标签: javascript python parsing