从HTTP响应中解析Json字符串

时间:2014-11-03 10:10:27

标签: python json

我正在尝试从Python中的HTTP请求解析JSON响应。但我得到以下例外:

 ValueError: No JSON object could be decoded

Python代码:

profile = webdriver.FirefoxProfile()
profile.set_preference('network.http.phishy-userpass-length', 255)
browser = webdriver.Firefox(firefox_profile=profile)
browser.get("https://"+username+":"+password+"@"+url)
htmltext= str(browser.page_source)
html=soup(htmltext)
jsondata= str(html.find('pre')).strip('</pre>')
data=json.loads(jsondata)
print data['entries']

JSON响应:

{
   "count":1,
   "entries": 
   [
      {
         "id":15862,
         "application":loginAudit,
         "user":charan.kumar@speridian.com,
         "time":"2014-10-30T02:08:14.103-04:00",
         "values":
         {
                 "\/loginAudit\/login\/no-error\/user":"charan.kumar@speridian.com"
         }

      }
   ]
}

1 个答案:

答案 0 :(得分:2)

我在这里看到了几个问题,但最突出的两个问题是:

  1. 您正在使用BeautifulSoup来解析页面。如果你真的只收到你发布的类似JSON的文本,那么BeautifulSoup将无法解析它。即使它没有抛出错误,输出也将是某种形式的HTML,而不是JSON。

  2. 您显示的页面实际上并不是有效的JSON。 applicationuser的值根本没有引用。

  3. 我也有点疑惑为什么你用Selenium来获得回应。除非在该特定页面上执行JavaScript(您确实可以使用真正的浏览器执行它),否则您似乎正在使用推土机来尝试破解它。

    使用标准库工具(urllib2urllib.request,取决于您的Python版本)应该足够,可能需要设置一些显式HTTP标头。就个人而言,我会使用requests module来完成这些任务;它甚至还带有内置的JSON处理功能。