我最近实现了添加target="_blank"到这样的外部链接:
@hooks.register('after_edit_page')
def do_after_page_edit(request, page):
if hasattr(page, "body"):
soup = BeautifulSoup(page.body)
for a in soup.findAll('a'):
if hasattr(a, "href"):
a["target"] = "_blank"
page.body = str(soup)
page.body = page.body.replace("<html><head></head><body>", "")
page.body = page.body.replace("</body></html>", "")
page.body = page.body.replace("></embed>", "/>")
page.save()
@hooks.register('construct_whitelister_element_rules')
def whitelister_element_rules():
return {
'a': attribute_rule({'href': check_url, 'target': True}),
}
Run Code Online (Sandbox Code Playgroud)
问题:
美丽的汤混淆输出,添加html, head & body标签 - 不要自动放置html,头部和身体标签,beautifulsoup
它也与嵌入标签混淆 - 如何让BeautifulSoup 4尊重自动关闭标签?
因此我蹩脚的" fix"用空字符串手动替换部分输出.
题:
这样做的正确和最佳方法是什么?
这是我的脚本:
import BeautifulSoup
if __name__ == "__main__":
data = """
<root>
<obj id="3"/>
<obj id="5"/>
<obj id="3"/>
</root>
"""
soup = BeautifulSoup.BeautifulStoneSoup(data)
print soup
Run Code Online (Sandbox Code Playgroud)
运行时,打印:
<root>
<obj id="3"></obj>
<obj id="5"></obj>
<obj id="3"></obj>
</root>
Run Code Online (Sandbox Code Playgroud)
我希望它保持相同的结构.我怎样才能做到这一点?
我正在尝试使用漂亮的汤在html中插入注释,我想在关闭头部之前插入它,我正在尝试这样的操作
soup.head.insert(-1,"<!-- #mycomment -->")
Run Code Online (Sandbox Code Playgroud)
它在插入之前,</head>但值已被实体编码<!-- #mycomment -->。Beautiful Soup文档谈到了插入标签,但是我应该如何直接插入注释。