如何从 JSON 文件中删除所有 HTML 内容?
How can I strip all the HTML content from a JSON file?
我想清除 JSON 文件中错误提取的 HTML 内容,方法是丢弃包含在 HTML 标签中的所有文本,包括标签本身。
我试过这个功能:
def stripIt(s):
txt = re.sub('</?[^<]+?>.*?</[^<]+?>', '', s)
return re.sub('\s+', ' ', txt)
但是当我将它应用到 JSON 文件时,它可能会破坏 JSON 文件,给出一些错误。
HTML 内容也因缺少标签、仅关闭标签等而损坏。
那么如何从 JSON 文件中删除所有 HTML 内容而不破坏文件?
How do I strip the html content out from a json file without breaking it?
与任何其他序列化数据结构的方式相同。通过使用适当的解析器(在这种情况下,是一个小的递归函数)。
import json
import re
json_string = """{
"prop_1": {
"prop_1_1": ["some <html> data", 17, "more <html> data"],
"prop_1_2": "here some <html>, too"
},
"prop_2": "and more <html>"
}"""
def unhtml(string):
# replace <tag>...</tag>, possibly more than once
done = False
while not done:
temp = re.sub(r'<([^/]\S*)[^>]*>[\s\S]*?</>', '', string)
done = temp == string
string = temp
# replace remaining standalone tags, if any
string = re.sub(r'<[^>]*>', '', string)
string = re.sub(r'\s{2,}', ' ', string)
return string.strip()
def cleanup(element):
if isinstance(element, list):
for i, item in enumerate(element):
element[i] = cleanup(item)
elif isinstance(element, dict):
for key in element.keys():
element[key] = cleanup(element[key])
elif isinstance(element, basestring):
element = unhtml(element)
return element
用作
data = json.loads(json_string)
cleanup(data)
json_string = json.dumps(data)
print json_string
丢弃 HTML 标签的正则表达式只解决了一半的问题。所有字符实体(如 &
或 <
将保留在字符串中。
重写 unhtml()
以使用 proper parser。
我在这里假设您正在尝试从 JSON 对象值中删除 HTML。
加载JSON对象并提取对象值然后转换为字符串,防止因Unicode字符转换而导致的任何错误:
import json
import re
with open('File_Name', encoding="utf8") as jsonFile:
data = json.load(jsonFile)
string = str(*JSON_Object_Value*)
用于从 JSON 对象的字符串值中删除 HTML 标记并用 space 字符 (" ") 替换它们:
clean = re.compile('<.*?>')
string = re.sub(clean, " ", string)
用于从 JSON 对象的字符串值中去除任何字符表示的十六进制数,并用 space 字符 (" ") 替换它们:
clean = re.compile('&.*?;')
string = re.sub(clean, " ", string)
除了 space 字符,您也可以将它们替换为任何其他所需的字符。
我想清除 JSON 文件中错误提取的 HTML 内容,方法是丢弃包含在 HTML 标签中的所有文本,包括标签本身。
我试过这个功能:
def stripIt(s):
txt = re.sub('</?[^<]+?>.*?</[^<]+?>', '', s)
return re.sub('\s+', ' ', txt)
但是当我将它应用到 JSON 文件时,它可能会破坏 JSON 文件,给出一些错误。
HTML 内容也因缺少标签、仅关闭标签等而损坏。
那么如何从 JSON 文件中删除所有 HTML 内容而不破坏文件?
How do I strip the html content out from a json file without breaking it?
与任何其他序列化数据结构的方式相同。通过使用适当的解析器(在这种情况下,是一个小的递归函数)。
import json
import re
json_string = """{
"prop_1": {
"prop_1_1": ["some <html> data", 17, "more <html> data"],
"prop_1_2": "here some <html>, too"
},
"prop_2": "and more <html>"
}"""
def unhtml(string):
# replace <tag>...</tag>, possibly more than once
done = False
while not done:
temp = re.sub(r'<([^/]\S*)[^>]*>[\s\S]*?</>', '', string)
done = temp == string
string = temp
# replace remaining standalone tags, if any
string = re.sub(r'<[^>]*>', '', string)
string = re.sub(r'\s{2,}', ' ', string)
return string.strip()
def cleanup(element):
if isinstance(element, list):
for i, item in enumerate(element):
element[i] = cleanup(item)
elif isinstance(element, dict):
for key in element.keys():
element[key] = cleanup(element[key])
elif isinstance(element, basestring):
element = unhtml(element)
return element
用作
data = json.loads(json_string)
cleanup(data)
json_string = json.dumps(data)
print json_string
丢弃 HTML 标签的正则表达式只解决了一半的问题。所有字符实体(如 &
或 <
将保留在字符串中。
重写 unhtml()
以使用 proper parser。
我在这里假设您正在尝试从 JSON 对象值中删除 HTML。
加载JSON对象并提取对象值然后转换为字符串,防止因Unicode字符转换而导致的任何错误:
import json
import re
with open('File_Name', encoding="utf8") as jsonFile:
data = json.load(jsonFile)
string = str(*JSON_Object_Value*)
用于从 JSON 对象的字符串值中删除 HTML 标记并用 space 字符 (" ") 替换它们:
clean = re.compile('<.*?>')
string = re.sub(clean, " ", string)
用于从 JSON 对象的字符串值中去除任何字符表示的十六进制数,并用 space 字符 (" ") 替换它们:
clean = re.compile('&.*?;')
string = re.sub(clean, " ", string)
除了 space 字符,您也可以将它们替换为任何其他所需的字符。