将所有HTML标签转换为符号使用python

2024-10-01 00:35:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是改变每个标签(无论是它的<a href=><title></title></div>。。。等)一个符号。你知道吗

我试着用漂亮的汤,但它只找到我定义的标签。。。你知道吗

我在数据库里找到了一些代码HTMLparser.py文件你知道吗

tagfind = re.compile('([a-zA-Z][^\t\n\r\f />\x00]*)(?:\s|/(?!>))*')

我相信这就是我要找的我只是不知道如何正确使用它。你知道吗

我还想我可以用:

handle_starttag(self, tag, attrs):

但我不想定义标签,我只想让脚本找到每一个标签并将其更改为。。。你知道吗

这可能吗?你知道吗

谢谢你的帮助!!你知道吗


Tags: 文件代码pydivre数据库定义title
2条回答

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

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)

那么任何变化都会反映在汤里。你知道吗

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

而且,regex看起来不是一个很好的正则表达式(只匹配标记中的内容,而不是整个标记本身),所以我找到了一个更适合您的目的的正则表达式:

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

此标记将匹配以下内容:

<h1>
</h1>
<img src="foo.com/image.png">

我们可以使用re.sub替换所有标记。这将查找某个正则表达式的所有匹配项,并用其他内容替换它们。以下是您如何将其用于您想做的事情:

import re

html_regex = r"""</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)/?>"""
html = "<h1>Foo</h1>"

print(re.sub(html_regex, "@", html))

这将打印:

@Foo@

相关问题 更多 >