使用Python 3.x从网站获取JSON数据

3

我正在尝试从一个网站中获取一些JSON数据,以用于为Discord机器人制作的小程序。目前的代码如下:

if message.content.startswith("!jsontest"):
    import requests
    data = requests.get('http://schoolido.lu/api/cards/799/').json()
    print(data)

我也尝试使用urllib.request.urlopen,但无论使用哪种方法,都会收到403错误。以下是输出:

   Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\site-packages\discord\client.py", line 259, in _run_event
    yield from getattr(self, event)(*args, **kwargs)
  File "C:/Users/user/Desktop/Bot.py", line 177, in on_message
    response = ur.urlopen("http://schoolido.lu/api/cards/799/")
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 162, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 471, in open
    response = meth(req, response)
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 581, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 509, in error
    return self._call_chain(*args)
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain
    result = func(*args)
  File "C:\Users\user\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 589, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden

我是不是漏掉了什么东西,还是那段代码有问题?我试过很多来自Stack Overflow的示例,但它们都没有做出任何不同的反应,即我仍然收到一个403错误。


您尝试过传递一个User-Agent头吗?像这样:data = requests.get('http://schoolido.lu/api/cards/799/', headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"}).json() - alecxe
是的,还是403错误。 - link2110
你的IP地址是否因为滥用API而被封锁了?如果可以的话,请尝试使用另一个IP地址。 - Suever
所以我想我没有做错任何事情,凭直觉,我远程登录我的桌面电脑并从那里运行它。我的酒店WiFi正在添加某些内容/阻止我拉取请求。该代码在我家的电脑上正常工作。感谢大家的帮助。 - link2110
1个回答

0
尝试先将其转换为Python字典,像这样。它应该能够正常工作。
if message.content.startswith("!jsontest"):
import requests
import json
data = requests.get('http://schoolido.lu/api/cards/799/')
text = data.text
dictionary = json.loads(text)
print(data)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接