Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解析这种类型的文本?_Javascript_Python_Ajax_Json_Parsing - Fatal编程技术网

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

Javascript 如何解析这种类型的文本?,javascript,python,ajax,json,parsing,Javascript,Python,Ajax,Json,Parsing,注意:我不熟悉python、javascript和scraping 我正在用python抓取一个网站,使用漂亮的汤和机械化。 一些数据是通过ajax请求加载的。 我在抓取回复时遇到了麻烦 示例Ajax请求URL: 样本响应:d1=[“m11”、“m12”、“m13”]、[“m21”、“m22”、“m23”];d2=[“x11”、“x12”]、[“x21”、“x22”]、[“x31”、“x32”]] 虽然整个repsonse不是一个合适的json对象,但d1和d2的值都是一个有效的json对象,我

注意:我不熟悉python、javascript和scraping

我正在用python抓取一个网站,使用漂亮的汤和机械化。 一些数据是通过ajax请求加载的。 我在抓取回复时遇到了麻烦

示例Ajax请求URL

样本响应:d1=[“m11”、“m12”、“m13”]、[“m21”、“m22”、“m23”];d2=[“x11”、“x12”]、[“x21”、“x22”]、[“x31”、“x32”]]

虽然整个repsonse不是一个合适的json对象,但d1和d2的值都是一个有效的json对象,我可以使用python中的json解析器来解析。但是如何解析整个响应呢

显而易见的方法是搜索响应中的所有“=”并提取json对象,然后使用json解析器对其进行解析

但我觉得必须有一种更优雅的方式来做这件事(解析整个响应)。你能给我引路吗


提前谢谢

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

JSON响应:

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

正如Kevin所指出的,这与Python非常接近,我们可以利用
ast
模块(特别是
ast.parse
ast.literal\u 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']]}

请注意,我相信您的意思是
报废
,而不是
报废
如何返回响应?什么类型的物体?字符串?响应采用有效的Python语法。。。我想知道
ast.parse
在这里是否有用。@ZachGates:响应是使用br.open(url.get_data(),其中br=mechanize.Browser()获得的,我想他是在接收响应,而不是生成响应。因此,如果不进行一些认真的分析,他就不能轻易地将“=”s改为“:”s。@凯文:是的。收到回复。在给出的答案中,我必须更改“=”->“:”以及“;”->“,”。直接替换可能会破坏响应。一个问题。您显示的输出是否是正确的json对象?在jsonlint.com上尝试查看其正确性表明情况并非如此。@user1599964:否,我显示的输出是一个Python字典。如果您想将其编码为json,只需将其绑定到某个对象(比如
d
),然后执行
json.dumps(d)