【问题标题】:Python extract json structure from html pagePython从html页面中提取json结构
【发布时间】:2020-02-11 19:48:57
【问题描述】:

在 python 中,我正在阅读一个包含很多东西的 html 页面内容。 为此,我通过这种方式将网页作为字符串读取:

url = 'https://myurl.com/'
reqq = req.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
reddit_file = req.urlopen(reqq)
reddit_data = reddit_file.read().decode('utf-8')

如果我打印 reddit_data 我可以正确看到整个 html 内容。 现在,里面有一个像 json 这样的结构,我想从中读取并提取一些字段。

结构下方:

"dealDetails" : {
      "f240141a" : {
         "egressUrl" : "https://ccc.com",
         "title" : "ZZZ",
         "type" : "ghi",
      },
      "5f9ab246" : {
         "egressUrl" : "https://www.bbb.com/",
         "title" : "YYY",
         "type" : "def",
      },
      "2bf6723b" : {
         "egressUrl" : "https://www.aaa.com//",
         "title" : "XXX",
         "type" : "abc",
      },
}

我想要做的是:找到dealDetails 字段,然后为每个f240141a 5f9ab246 2bf6723b 获取 egressURL、标题和类型值。

谢谢

【问题讨论】:

  • 你能发布完整的script标签吗?

标签: python html json string


【解决方案1】:

试试这个,

[nested_dict['egressUrl'] for nested_dict in reddit_data['dealDetails'].keys()]

要访问 JSON 的值,您可以将其视为字典并使用相同的语法来访问值。

Edit-1:

确保您的 reddit_data 类型是字典。

如果type(reddit_data)str

你需要做的..

import ast
reddit_data = ast.literal_eval(reddit_data)

import json
reddit_data = json.loads(reddit_data)

【讨论】:

  • 我尝试了您的建议,但收到此错误:[nested_dict['egressUrl'] for nested_dict in reddit_data['dealDetails'].keys()] TypeError: string indices must be integers
  • @xXJohnRamboXx 使用json.loads(your json data)ast.literal_eval(your json data)读取您的json数据
【解决方案2】:
  • 如果您只是想知道如何访问 egressURL、标题和类型。您可能只想阅读下面的答案!但是要小心,除非您将 HTML 文件 reddit_data 转换为字典之类的东西(修改后的 shaik moeed 的回答一点点,否则请注意以下代码)返回标题和类型):
[(i['egressUrl'], i['title'], i['type']) for i in reddit_data['dealDetails'].keys()]
  • 但是,如果我没记错的话,您缺少的部分是从 HTML 到 JSON 友好文件的转换。我个人使用的是 eval 函数,尽管它很不受欢迎
dictionary = eval(reddit_data)

这会将整个文件转换为字典,我建议您只在“看起来”像字典的文本部分使用它! (eval 不受欢迎的原因之一是它不会将像 'true'/'false' 这样的字符串转换为 Python 的 True/False,请注意 :))

希望有所帮助!

【讨论】:

    猜你喜欢
    • 2023-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    相关资源
    最近更新 更多