注意:我是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解析器解析它。
但我觉得必须有一种更优雅的方式(解析整个反应)。你能指导吗?
提前致谢!
答案 0 :(得分:3)
正如Kevin所说,这与Python足够接近,我们可以利用ast
模块(特别是ast.parse
和ast.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"]]
};