更改HTML文本并保存回HTML

2024-05-23 20:44:15 发布

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

我正在研究一种简单的方法,将一本用HTML格式的电子书的每一句话包装在span标记中

我正在使用一个经过训练的机器学习模型来对句末标点符号(“.!?”)进行分类并获得真实的句子边界(例如:在美国,“S”不被视为句子)

问题是,为了提供正确的模型数据,我需要首先从我的HTML电子书中提取文本(使用BeautifulSoup的get_text('\n')

现在,我能够将get_text('\n')的输出包装在span标记中。但我不能保存它,因为我丢失了原始HTML电子书中使用的所有其他标记

示例HTML电子书示例:

<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><link href="style.css" rel="stylesheet" type="text/css" /><title> Name. Of the book. </title></head> ...
</div>

get_text之后

Name. Of the book.

运行我的算法后:

<span>Name. Of the book.</span>

如何获得此输出:

<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><link href="style.css" rel="stylesheet" type="text/css" /><title> <span>Name. Of the book.</span> </title></head> ...
</div>

提前感谢您的帮助


Tags: ofthetextname标记模型gettitle
2条回答

您可以使用wrap()方法(doc)将文本包装成<span>标记-它将更新整个HTML结构

例如:

data = '''<html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" /><link href="style.css" rel="stylesheet" type="text/css" /><title> Name. Of the book. </title></head>'''

from bs4 import BeautifulSoup

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

print('Before:')
print('-' * 80)
print(soup.prettify())
print('-' * 80)

for text in soup.find_all(text=True):
    text.wrap(soup.new_tag("span"))     # use wrap() function to wrap the text into <span> tag

print('After:')
print('-' * 80)
print(soup.prettify())
print('-' * 80)

打印(注意<title>标记内的<span>):

Before:
                                        
<html>
 <head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
  <link href="style.css" rel="stylesheet" type="text/css"/>
  <title>
   Name. Of the book.
  </title>
 </head>
</html>
                                        
After:
                                        
<html>
 <head>
  <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
  <link href="style.css" rel="stylesheet" type="text/css"/>
  <title>
   <span>
    Name. Of the book.
   </span>
  </title>
 </head>
</html>
                                        

好吧,我有一个非常天真但非常有效的方法。您可以先获取整个html代码,然后将其存储在字符串中,然后对其使用Regular Expression来提取span标记的文本。

这是我现在唯一能想到的方法。希望这有帮助:)

相关问题 更多 >