我正在尝试从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"
}
}
]
}
答案 0 :(得分:2)
我在这里看到了几个问题,但最突出的两个问题是:
您正在使用BeautifulSoup来解析页面。如果你真的只收到你发布的类似JSON的文本,那么BeautifulSoup将无法解析它。即使它没有抛出错误,输出也将是某种形式的HTML,而不是JSON。
您显示的页面实际上并不是有效的JSON。 application
和user
的值根本没有引用。
我也有点疑惑为什么你用Selenium来获得回应。除非在该特定页面上执行JavaScript(您确实可以使用真正的浏览器执行它),否则您似乎正在使用推土机来尝试破解它。
使用标准库工具(urllib2
或urllib.request
,取决于您的Python版本)应该足够,可能需要设置一些显式HTTP标头。就个人而言,我会使用requests
module来完成这些任务;它甚至还带有内置的JSON处理功能。