如何解析这种类型的文本?

时间:2015-05-06 20:12:54

标签: javascript python ajax json parsing

注意:我是python,javascript和scraping的新手。

我正在使用美丽的汤和机械化在python中抓取一个网站。 一些数据是通过ajax请求加载的。 我在收集回复方面遇到了麻烦。

示例Ajax请求网址http://example.com/getJSData/?file=/data/js/GetData.js&cmd=GETDATA&rc=BGAN

样本回复:d1 = [[" m11"," m12"," m13"],[" m21"," m22"," m23"]]; d2 = [[" x11"," x12"],[& #34; x21"," x22"],[" x31"," x32"]]

虽然整个repsonse不是一个合适的json对象,但是每个d1和d2的值都是一个有效的JSON对象,我可以使用python中的一些json解析器进行解析。但是如何解析整个回应?

显而易见的方法是搜索所有" ="在响应中并提取json对象,然后使用json解析器解析它。

但我觉得必须有一种更优雅的方式(解析整个反应)。你能指导吗?

提前致谢!

2 个答案:

答案 0 :(得分:3)

正如Kevin所说,这与Python足够接近,我们可以利用ast模块(特别是ast.parseast.literal_eval)。例如:

>>> import ast
>>> s = '''d1=[["m11","m12","m13"],["m21","m22","m23"]];d2=[["x11", "x12"],["x21", "x22"],["x31", "x32"]]'''
>>> {b.targets[0].id: ast.literal_eval(b.value) for b in ast.parse(s).body}
{'d2': [['x11', 'x12'], ['x21', 'x22'], ['x31', 'x32']], 
 'd1': [['m11', 'm12', 'm13'], ['m21', 'm22', 'm23']]}

答案 1 :(得分:0)

只需将您的响应包装在JSON对象中,如下所示:

JSON响应:

{
    d1:[["m11","m12","m13"],["m21","m22","m23"]],
    d2:[["x11", "x12"],["x21", "x22"],["x31", "x32"]]
};