在Python中,提取包含JavaScript变量定义的行并获取分配给它的值的最简单方法是什么(我正在使用BeautifulSoup从网页抓取JavaScript),它包含在花括号中(即{, }),请记住,变量本身可能包含任何几个级别的嵌套花括号。
例如输入
var myVar = { "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]}
我希望将完整的myVar
值作为string
(因为我希望在此之后将其转换为Python list
),
{ "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]}
任何帮助都会很棒,因为我不熟悉Python。
答案 0 :(得分:1)
import json
a = json.dumps(myVar)
变量a
在此示例中属于字符串类型。你可以随意操纵它。
答案 1 :(得分:1)
使用str.index
查找json对象的开始位置re.sub
{"a": "123"
a:"123"
} str.replace
(将单引号更改为双引号: ['1','2']
)修复json:
import json
import re
var = '''var myVar = { a: "123",b:"345", c: {c1:20,c2:"c123", c3: {c3_1: {c3_1_1:"12"}}}, d:21, e:['1','2']}'''
v = var[var.index('{'):]
v = re.sub(r'(\w*):', r'"\1":', v)
v = v.replace('\'', '\"')
>>> v
'{ "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]}'
>>> json.loads(v)
{u'a': u'123', u'c': {u'c3': {u'c3_1': {u'c3_1_1': u'12'}}, u'c2': u'c123', u'c1': 20}, u'b': u'345', u'e': [u'1', u'2'], u'd': 21}