无法从Strawpoll API检索数据

时间:2015-09-15 20:42:51

标签: python json api

我有一个简单的python代码转到this link并检索它的数据。这是代码

import urllib, json
url = "http://maps.googleapis.com/maps/api/geocode/json?address=googleplex&sensor=false"
htmlfile = urllib.urlopen(url)
data = json.loads(htmlfile.read())
print data

运行代码会返回网址中的数据。

{u'status': u'ZERO_RESULTS', u'results': []}

我也想这样做,但对于Strawpoll。阅读完API documentation后,看起来是相同的公式。转到strawpoll链接进行测试,它显示了与上面显示的google链接相同的内容结构。 API Documenation声明“所有资源都将以JSON格式返回数据”。但我没有收到任何数据,我收到错误。代码完全相同,但是使用了编辑过的网址。

import urllib, json
url = "http://strawpoll.me/api/v2/polls/1/"
htmlfile = urllib.urlopen(url)
data = json.loads(htmlfile.read())
print data

运行代码给我一个视图错误,我会发布一个图像但stackoverflow不会让我...

我收到的最后一个错误是“ValueError:无法加载JSON对象”。但API文档表示数据以JSON形式返回。

删除json.loads会给我纯粹的HTML。这是代码。同样,完全相同但删除了json.loads

import urllib
url = "http://strawpoll.me/api/v2/polls/1/"
htmlfile = urllib.urlopen(url)
data = htmlfile.read()
print data

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我刚刚运行了您的代码并查看了HTML响应。也许您没有设置正确的HTTP标头?它说拒绝访问,但我不确定为什么会这样。我建议使用requests

>>> url = "http://strawpoll.me/api/v2/polls/1/"
>>> import requests
>>> requests.get(url).json()
{u'id': 1, u'multi': False, u'votes': [14683, 31165, 5635, 7397], u'options': [u'Sucker punch ', u'Pirates of carribian ', u'Prison logic', u'Witchhunter'], u'title': u'What movie should we watch'}

由于您没有从浏览器打开URL,因此strawpoll.me可能会努力保护其内容不被抓取。实际上,我在HTML响应中找到了这一行:

<p>The owner of this website (strawpoll.me) has banned your access based on your browser's signature (***).</p>