【发布时间】:2020-01-14 13:53:33
【问题描述】:
我有一个要编辑的 html 文档,以便其中的任何单词都可以突出显示/加粗。
我在内存中有 html 并已传递给 BeautifulSoup。我遍历所有标签并获取它们的字符串元素。如果任何字符串包含匹配的单词,我将编辑该字符串并将其替换为 html,并用标记环绕所需的单词。
from flask import Flask, Markup
from bs4 import BeautifulSoup
def match( documentText: str, searchQuery: str) -> Markup:
words = documentText.split( ' ')
if len( words) >= 3:
words[2] = f'<strong>{ words[2]}</strong>'
logger.info( f'{ words=}')
return Markup( ' '.join( words))
for link in html.find_all( True):
if ( link.string):
link.string = match( link.string, searchQuery)
app = Flask( __name__)
@app.route( '/')
def home():
logger.info( 'trying markup and testing logging')
return str( html), 200
app.run( debug=True)
现在,我没有在我想要的地方用粗体字呈现页面,而是在视觉上看到了 html 标签,这是因为如果我查看源代码,标签实际上由&gt; 表示。这似乎来自“link.string = match(link.string, searchQuery)”这一行——我想这很有意义,因为 BeautifulSoup 正在进行类型检查并确保标签中唯一的内容。 string 字段确实是一个字符串。我想理想的最终状态是从标签中创建一个分支以包含子标签。
这是其他人以前解决过的问题吗?我对整个事情的解决方案似乎笨拙且不雅,所以如果有人有更好的路线,我不会介意。
【问题讨论】:
-
打电话给
return str(html).replace("&gt;",">").replace("&lt","<"), 200怎么样? -
@Kristian 是的,可以。谢谢!这是那些日子之一......
-
我已经更新了我的答案以展示更好的方法
标签: html python-3.x flask beautifulsoup