Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理HTML以删除和关闭Python中打开的标记_Python_Html_Html Parsing_Jinja2 - Fatal编程技术网

处理HTML以删除和关闭Python中打开的标记

处理HTML以删除和关闭Python中打开的标记,python,html,html-parsing,jinja2,Python,Html,Html Parsing,Jinja2,我试图在Python中使用HTMLParser处理没有结束标记的HTML,或者使用无效的结束标记: 条目: <div> <p>foo </div> bar</span> 福 酒吧 输出:(关闭打开的标签和打开错误的关闭) 福 酒吧 甚至:(在不立即打开和关闭所有打开的标签的情况下移除关闭) 富吧 我的代码只关闭打开的标记,但不能在HTMLPasser的循环中编辑HTML from HTMLParser import HTMLPa

我试图在Python中使用HTMLParser处理没有结束标记的HTML,或者使用无效的结束标记:

条目:

<div>
  <p>foo 
</div>
bar</span>

福
酒吧
输出:(关闭打开的标签和打开错误的关闭)

酒吧
甚至:(在不立即打开和关闭所有打开的标签的情况下移除关闭)


富吧

我的代码只关闭打开的标记,但不能在HTMLPasser的循环中编辑HTML

from HTMLParser import HTMLParser

singleton_tags = [
  'area','base','br','col','command','embed','hr',
  'img', 'input','link','meta','param','source'
]

class HTMLParser_(HTMLParser):

    def __init__(self, *args, **kwargs):
        HTMLParser.__init__(self, *args, **kwargs)
        self.open_tags = []

    # Handle opening tag
    def handle_starttag(self, tag, attrs):
        if tag not in singleton_tags:
            self.open_tags.append(tag)

    # Handle closing tag
    def handle_endtag(self, tag):
        if tag not in singleton_tags:
            self.open_tags.pop()

def close_tags(text):
    parser = HTMLParser_()

    # Mounts stack of open tags
    parser.feed(text)

    # Closes open tags
    text += ''.join('</%s>'%tag for tag in parser.open_tags)

    return text
从HTMLParser导入HTMLParser
单件标签=[
'区域','基础','br','列','命令','嵌入','人力资源',
“img”、“输入”、“链接”、“元”、“参数”、“源”
]
类HtmlPasser(HtmlPasser):
定义初始化(self,*args,**kwargs):
HtmlPasser.\uuuuu初始化(self,*args,**kwargs)
self.open_标记=[]
#手柄开启标签
def句柄\u开始标记(自身、标记、属性):
如果标记不在singleton_标记中:
self.open_tags.append(标记)
#句柄结束标记
def handle_endtag(self,tag):
如果标记不在singleton_标记中:
self.open_tags.pop()
def close_标签(文本):
parser=HTMLParser_u389;()
#安装打开标记的堆栈
parser.feed(文本)
#关闭打开的标记
text+=''.join(''%tag表示解析器中的标记。打开标记)
返回文本

我建议调查一下。这是我(对于任何语言)使用过的最好的HTML解析器,它使在Python中使用HTML变得非常容易

有一个
美化
功能可能对您有用。查看标题为的部分

<div>
  <p>foo bar</p>
</div>
from HTMLParser import HTMLParser

singleton_tags = [
  'area','base','br','col','command','embed','hr',
  'img', 'input','link','meta','param','source'
]

class HTMLParser_(HTMLParser):

    def __init__(self, *args, **kwargs):
        HTMLParser.__init__(self, *args, **kwargs)
        self.open_tags = []

    # Handle opening tag
    def handle_starttag(self, tag, attrs):
        if tag not in singleton_tags:
            self.open_tags.append(tag)

    # Handle closing tag
    def handle_endtag(self, tag):
        if tag not in singleton_tags:
            self.open_tags.pop()

def close_tags(text):
    parser = HTMLParser_()

    # Mounts stack of open tags
    parser.feed(text)

    # Closes open tags
    text += ''.join('</%s>'%tag for tag in parser.open_tags)

    return text