【问题标题】:How to turn text/html requests response into JSON format in python?如何在 python 中将 text/html 请求响应转换为 JSON 格式?
【发布时间】:2020-06-09 01:44:01
【问题描述】:

我有一个问题,就像我在主题中提到的那样。试图获取网站上所有 CVE 的名称及其描述。我想使用 for 循环迭代 JSON 响应并将所有内容发送到数据库。代码:

r = requests.get('https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=microsoft')
r.headers['content-type']

打印出标题后,它显示响应是 text/html,我无法将其转换为 JSON。我试图像往常一样按照使用r.json() 的文档进行操作。但是在运行代码后我得到这样的错误:

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我也试过json.dumps(),可惜没有解决问题。我花了几个小时寻找解决方案,但找不到任何可以帮助我将此响应转换为 JSON 的东西。 这个网站和这个回复是否有可能?我可以做不同的事情吗?有没有其他好的解决方案可以实现我的目标?如果我写了一些不能理解的东西,请纠正我或问我一个问题。

非常感谢您提供任何帮助。 :-)

【问题讨论】:

  • 为什么你认为它是 JSON 格式的?
  • 此 API 的响应不是 json,而是 Html 你需要网络抓取来完成它。
  • 你说的网页抓取是什么意思?

标签: python json python-requests


【解决方案1】:

API 的响应不是 JSON,而是 HTML,您可以使用 Pandas read_htmlBeautifulsoup 来解析所需的详细信息,下面是使用 pandas read_html 的示例

import pandas as pd

df = pd.read_html("https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=Microsoft")

df[2].to_dict(orient='records')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    相关资源
    最近更新 更多