【发布时间】:2020-06-03 20:39:16
【问题描述】:
我在网上看到了几个关于如何将 HTML 内容转换为 JSON 的示例,但我无法得到实际结果。
假设我有以下 html_content:
<html>
<body>
<h1>My Heading</h1>
<p>Hello world</p>
<table>
<tr>
<th>Name</th>
<th>Age</th>
<th>License</th>
<th>Amount</th>
</tr>
<tr>
<td>John</td>
<td>28</td>
<td>Y</td>
<td>12.30</td>
</tr>
<tr>
<td>Kevin</td>
<td>25</td>
<td>Y</td>
<td>22.30</td>
</tr>
<tr>
<td>Smith</td>
<td>38</td>
<td>Y</td>
<td>52.20</td>
</tr>
<tr>
<td>Stewart</td>
<td>21</td>
<td>N</td>
<td>3.80</td>
</tr>
</table>
</body>
</html>
如您所见,它包含标题、段落和表格元素。 我正在尝试将上述内容转换为 JSON 并将结果输出到一个单独的文件,格式为 正确。这是我的代码:
import sys
import json
jsonD = json.dumps(html_content, sort_keys=True, indent=4)
sys.stdout=open("output.json","w")
print (jsonD)
sys.stdout.close()
结果是:
"\n<html>\n\t<body>\n\t\t<h1>My Heading</h1>\n\t\t<p>Hello world</p>\n\t\t<table>\n\t\t\t<tr>\n\t\t\t\t<th>Name</th>\n\t\t\t\t<th>Age</th>\n\t\t\t\t<th>License</th>\n\t\t\t\t<th>Amount</th>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>John</td>\n\t\t\t\t<td>28</td>\n\t\t\t\t<td>Y</td>\n\t\t\t\t<td>12.30</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Kevin</td>\n\t\t\t\t<td>25</td>\n\t\t\t\t<td>Y</td>\n\t\t\t\t<td>22.30</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Smith</td>\n\t\t\t\t<td>38</td>\n\t\t\t\t<td>Y</td>\n\t\t\t\t<td>52.20</td>\n\t\t\t</tr>\n\t\t\t<tr>\n\t\t\t\t<td>Stewart</td>\n\t\t\t\t<td>21</td>\n\t\t\t\t<td>N</td>\n\t\t\t\t<td>3.80</td>\n\t\t\t</tr>\n\t\t</table>\n\t</body>\n</html>\n"
如您所见,结果没有转义任何返回或制表符,并且使输出看起来像一个长字符串。我该如何纠正这个问题,以便从 JSON 角度正确地格式化输出?
【问题讨论】:
-
你期待什么输出?
-
这可能是一个有用的例子:xavierdupre.fr/blog/2013-10-27_nojs.html
-
@ZacharyBlackwood 这个例子我看过,但是如何导入 HTMLtoJSONParser 模块?
-
@AlexW 类似于我放置的输出,但每个元素之间没有“/n”和“/t”。相反,它实际上应该在写入时返回到新行或缩进。
-
@Adam 在那篇博文中,他实际上创建了 HTMLtoJSONParser,这不是他从其他地方导入的东西