簡體   English   中英

Python 從 html 頁面提取 json 結構

[英]Python extract json structure from html page

在 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、標題和類型值。

謝謝

嘗試這個,

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

要訪問 JSON 的值,您可以將其視為字典並使用相同的語法來訪問值。

編輯-1:

確保您的 reddit_data 類型是字典。

如果type(reddit_data)str

你需要做..

import ast
reddit_data = ast.literal_eval(reddit_data)

或者

import json
reddit_data = json.loads(reddit_data)
  • 如果您只是想知道如何訪問 egressURL、標題和類型。 您可能只想閱讀下面的答案,但是請注意,除非您將 HTML 文件reddit_data轉換為字典之類的文件(修改后的shaik moeed的回答一點點以返回標題和類型),否則以下代碼將不起作用:
[(i['egressUrl'], i['title'], i['type']) for i in reddit_data['dealDetails'].keys()]
  • 但是,如果我做對了,那么您缺少的部分是從 HTML 到 JSON 友好文件的轉換。 我個人使用的是eval function,盡管它很不受歡迎
dictionary = eval(reddit_data)

這會將整個文件轉換為字典,我建議您僅在“看起來”像字典的部分文本上使用它,(eval 不受歡迎的原因之一是它不會轉換像' true'/'false' 到 Python 的 True/False:要小心 :) )

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM