【问题标题】:Attempting to download json file from DnDBeyond gives 403 error尝试从 DnDBeyond 下载 json 文件会出现 403 错误
【发布时间】:2020-05-21 18:04:51
【问题描述】:

我正在制作一个从 DnDBeyond 下载字符表的 D&D 机器人。不幸的是,尝试下载公开可用字符的 json 文件时会不断返回 403 错误。

我正在尝试下载此字符表: https://www.dndbeyond.com/characters/22738330/json

这是公开可用的,应该返回一个 json 文件。

我使用了以下代码:

import requests
url = "https://www.dndbeyond.com/characters/22738330/json"
response = requests.get(url)
print(response.json())

尽管我只需单击它就可以在浏览器上加载该字符,但它仍然返回 403 错误。我哪里错了?

【问题讨论】:

  • 你运行了多少次这个脚本?该网站可能会拒绝您过度使用。
  • 另外,问题正文中的 url 和代码示例不匹配。代码url末尾没有/json
  • 在您的脚本中添加headers。这个 URL 返回 HTML 数据,所以使用 response.content 。

标签: python json python-requests


【解决方案1】:

尝试添加有效的 User-Agent 和其他标头,使其看起来像是通过浏览器访问。

类似这样的:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3835.0 Safari/537.36',
       'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
       'Host':'www.dndbeyond.com',
       'Accept-Language': 'en-US,en;q=0.5',
       'Accept-Encoding': 'gzip, deflate',
       'Upgrade-Insecure-Requests': '1',
       'Connection': 'close'
    }


response = requests.get(url, headers=headers)

【讨论】:

  • 只下载 HTML,不下载 JSON。但这是一个开始。
【解决方案2】:

本网站受https://www.perimeterx.com/whywasiblocked/保护

它检测到您不是真正的用户并拒绝您访问。 检查脚本中response.text 的输出。

【讨论】:

【解决方案3】:

要访问 json,您需要删除路径组件“characters”上的复数。

至于数据格式,我几乎完成了整个结构的充实。

Objective-C 源代码包含所有类定义。

https://github.com/mouser/BeyondDnD

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    相关资源
    最近更新 更多