使用python将所有html标记更改为symbol

使用python将所有html标记更改为symbol,python,beautifulsoup,html-parsing,Python,Beautifulsoup,Html Parsing,我想做的是将每个标记(无论是或或或等)更改为符号 我尝试使用美丽的汤,但它只找到我定义的标签 我在HTMLparser.py中找到了一些代码 tagfind = re.compile('([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*') 我相信这就是我要找的我只是不知道如何正确使用它 我还想我可以使用: handle_starttag(self, tag, attrs): 但我不想定义标签,我只想让脚本找到每一个标签,并将其更改为 这可能吗

我想做的是将每个标记(无论是
等)更改为符号

我尝试使用美丽的汤,但它只找到我定义的标签

我在HTMLparser.py中找到了一些代码

tagfind = re.compile('([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*')
我相信这就是我要找的我只是不知道如何正确使用它

我还想我可以使用:

handle_starttag(self, tag, attrs):
但我不想定义标签,我只想让脚本找到每一个标签,并将其更改为

这可能吗


谢谢你的帮助

BeautifulSoup在这里不是一个好主意-它是为解析HTML而设计的,而不是编辑HTML

另外,这个正则表达式看起来不是很好(只匹配标记内的内容,而不是整个标记本身),因此我找到了一个更适合您的用途的不同正则表达式:

</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)/?>
这将打印:

@Foo@

一种更可靠的方法是递归访问每个标记,我只是在下面的示例中更改了名称,但是一旦有了标记,您可以做任何您想做的事情:

from bs4 import BeautifulSoup, element

def visit(s):
    if isinstance(s, element.Tag):
        has_children = s.find_all()
        if has_children:
            s.name = "foobar"
            for child in s:
                visit(child)
        else:
            s.name = "foobar"
要使用它:

 soup = BeautifulSoup(...)
 visit(soup)

然后任何变化都会反映在汤中。

这是很多标签。你的最终目标是什么?从HTML中删除每个标记并用符号替换它们意味着你为什么要这样做?@HarpAngell没问题!请记住接受对您有帮助的答案。只是缺少一个结尾)在打印功能上,但它工作@哈潘吉尔,那个标签给我换了。你能不能在完整的HTML中发布一个不起作用的Pastebin链接?@HarpAngell,你在说什么标签?您只需将soup传递给函数,并在找到标记时执行任何操作,在一些html上运行代码,然后在您说“一旦有了标记”后打印soup,但现在我意识到您的意思是,一旦脚本有了标记once
if-isinstance(s,element.tag)
为True,您就有了一个标记,因此每个s都是if/else中的标记,你可以用它做任何你想做的事情,它会比regexurl=os.path.abspath('test.html')sock=urllib.urlopen(url.read()soup=beautifulsou(sock,'html.parser')soup=visit(soup)print soup可靠得多,不要只在soup对象上分配call visit
from bs4 import BeautifulSoup, element

def visit(s):
    if isinstance(s, element.Tag):
        has_children = s.find_all()
        if has_children:
            s.name = "foobar"
            for child in s:
                visit(child)
        else:
            s.name = "foobar"
 soup = BeautifulSoup(...)
 visit(soup)