解析python中的响应

时间:2011-11-27 22:00:55

标签: python beautifulsoup

当我在主机上发送一些数据时:

r = urllib2.Request(url, data = data, headers = headers)
page = urllib2.urlopen(r)

soup = BeautifulSoup(page.read(), fromEncoding="cp-1251")
print page.read()

我有这样的事情:

[{"command":"settings","settings":{"basePath":"\/","ajaxPageState":{"theme":"spsr","theme_token":"kRHUhchUVpxAMYL8Y8IoyYIcX0cPrUstziAi8gSmMYk","css":[]},"ajax":{"edit-submit":{"callback":"spsr_calculator_form_ajax","wrapper":"calculator_form","method":"replaceWith","event":"mousedown","keypress":true,"url":"\/ru\/system\/ajax","submit":{"_triggering_element_name":"submit"}}}},"merge":true},{"command":"insert","method":null,"selector":null,"data":"\u003cdiv id=\"calculator_form\"\u003e\u003cform action=\"\/ru\/service\/calculator\" method=\"post\" id=\"spsr-calculator-form\" accept-charset=\"UTF-8\"\u003e\u003cdiv\u003e\u003cinput id=\"edit-from-ship-region-id\" type=\"hidden\" name=\"from_ship_region_id\" value=\"\" \/\u003e\n\u003cinput type=\"hidden\" name=\"form_build_id\" value=\"form-0RK_WFli4b2kUDTxpoqsGPp14B_0yf6Fz9x7UK-T3w8\" \/\u003e\n\u003cinput type=\"hidden\" name=\"form_id\" value=\"spsr_calculator_form\" \/\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"bg_p\"\u003e \n\u0421\u0435\u0439\u0447\u0430\u0441 \u0412\u044b... bla bla bla

但我希望有这样的东西:

<html><h1>bla bla bla</h1></html>

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您获得的答案很可能是用JSON编码的。如果这是真的那么使用BeautifulSoup没有任何意义(它是一个HTML / XML解析器)。如果您有JSON数据,则需要使用JSON解析器。两次调用page.read()没有任何意义,因为在第一次通话后它不会让你恢复正常。

重写我们获得的请求部分:

r = urllib2.Request(url, data = data, headers = headers)
page = urllib2.urlopen(r)
data = page.read()

现在我们需要使用JSON解析器而不是HTML解析器。这可以使用json库(在2.6以来的Python中)完成:

import json
decoded_data = json.loads(data)

现在,只需找到要提取的模型部分即可。考虑到你的例子并且想要打印出带有“blabla”的部分,你可以写:

result = unicode(decoded_data[1][u'data'])

要进行调试,请尝试:

print result
相关问题