2016-03-02 124 views
1

我正在尝试编写一个解析器,将采取HTML和转换/输出到Wiki语法(<b> = ''',<i> == ''等)。BeautifulSoup replace_with非标准标签

到目前为止,BeautifulSoup似乎只能替换标签内的内容,因此<b>变为<'''>而不是'''。我可以使用re.sub()将它们交换出来,但是由于BS将文档转换为“Python对象的复杂树”,我无法弄清楚如何替换这些标签并将它们重新插入到整体中文件。

有没有人有想法?

回答

1

我很确定已经有工具可以为你做这件事,但如果你问的是如何使用BeautifulSoup来做到这一点,你可以使用replace_with(),但你需要保留元素的文本。天真和简单的例子:

from bs4 import BeautifulSoup 

data = """ 
<div> 
    <b>test1</b> 
    <i>test2</i> 
</div> 
""" 

soup = BeautifulSoup(data, "html.parser") 

for b in soup.find_all("b"): 
    b.replace_with("'''%s'''" % b.text) 

for i in soup.find_all("i"): 
    i.replace_with("''%s''" % i.text) 

print(soup.prettify()) 

打印:

<div> 
'''test1''' 
''test2'' 
</div> 
+0

神奇。这就是我需要的,谢谢。有些工具可以在不同程度上执行此功能,但我可以找到的每个工具都保留了过多的HTML。我希望在可能的情况下纯转换为Wiki标记。 –