python 我正设法从www.example.com上找一份1000部最佳影片的名单mubi.com/lists/the-top-1000

6uxekuva  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(384)

我正试着从“www.example.com“上弄一个前1000名电影的名单https://mubi.com/lists/the-top-1000。有人能帮我弄一下代码吗?
我试过下面的代码:

import requests
import json

url = "https://api.mubi.com/v3/lists/the-top-1000/list_films?page={page}&per_page={per_page}"
page = 1
per_page = 48
headers = {'Client-Country': 'US'}
films = []

while True:
    response = requests.get(url.format(page=page, per_page=per_page), headers=headers)
    data = json.loads(response.text)
    films.extend(data["items"])
    if len(data["items"]) < per_page:
        break
    page += 1

#print the list of films
for film in films:
    print("{:<50} {}".format(film["film"]["title"], film["film"]["canonical_url"]))

我收到以下错误消息:

Traceback (most recent call last):
  File "C:\...\mubi.py", line 13, in <module>
    films.extend(data["items"])
                 ~~~~^^^^^^^^^
KeyError: 'items'

我得到了以下JSON响应:

{'code': 123, 'message': 'Missing headers', 'user_message': 'CLIENT_COUNTRY La CABECERA HTTP es necesaria', 'fatal': False}
pgky5nke

pgky5nke1#

如果您确定返回JSON,则可以使用requestsoffers a convenience method .json()来获取它
在使用.raise_for_status()之前,您可能还应该使用它作为结果成功与否的第一个检查

response = requests.get(...)
response.raise_for_status()  # check for success
data = response.json()

最后,使用不起眼的print()为自己显示数据(如果您发现您在早些时候提出,检查响应细节)可能足以诊断任何问题(例如,您可能收到有效的JSON,但内容可能是一条消息,指示您为他们的服务使用API令牌)

相关问题