我想通过丢弃HTML标记中包含的所有文本(包括标记本身)来清理错误提取的HTML内容的JSON文件。
我试过这个功能:
def stripIt(s):
txt = re.sub('</?[^<]+?>.*?</[^<]+?>', '', s)
return re.sub('\s+', ' ', txt)
但是当我将它应用到JSON文件时,它可能会破坏JSON文件,从而产生一些错误。
HTML内容也会因缺少标签,只关闭标签等而中断。
那么如何在不破坏文件的情况下从JSON文件中删除所有HTML内容?
答案 0 :(得分:4)
如何在不破坏json文件的情况下从hson文件中删除html内容?
与任何其他序列化数据结构相同。通过使用适当的解析器(在这种情况下,一个很小的递归函数)。
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]*?</\1>', '', 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。
答案 1 :(得分:0)
我在这里假设您正在尝试从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标记并将其替换为空格字符(“”):
clean = re.compile('<.*?>')
string = re.sub(clean, " ", string)
用于从JSON对象的字符串值中删除任何字符表示形式的十六进制数字,并将其替换为空格字符(“”):
clean = re.compile('&.*?;')
string = re.sub(clean, " ", string)
您也可以用其他任何所需的字符代替空格字符。