【发布时间】:2019-11-08 19:21:54
【问题描述】:
我正在编写一个代码来翻译 HTML 中的字符串。
更具体地说,我的目标是执行字符串替换。步骤是:文件解析,识别行中的字符串(如果有的话),最后用它的翻译版本替换这个字符串,取自字典。
我得到了宝贵的帮助 here,关于每行的 html 解析和字符串替换。
以txt形式打开html文件,逐行扫过,我举了一个例子here。
利用这两个示例中的知识,我编写了以下代码:
from bs4 import BeautifulSoup
from bs4 import SoupStrainer
from html_dictionary import port_eng
def str_replace_port_eng(file_name, tag_name):
with open(file_name, 'rb') as src:
doc = src.read()
soup = BeautifulSoup(doc, 'html.parser')
src.close()
only_tag_name = soup.find_all(str(tag_name))
with open("new_file.html", "w") as outf:
for line in soup:
for html_line in range(len(only_tag_name)):
pt_word = str(only_tag_name[html_line].text).strip()
pt_word = pt_word.strip('+')
pt_word = pt_word.strip(' ')
if pt_word != "":
en_word = port_eng[pt_word]
new_line = (str(only_tag_name[html_line]).replace(pt_word, en_word))
outf.writelines(new_line)
else:
en_word = pt_word
new_line = (str(only_tag_name[html_line]).replace(pt_word, en_word))
outf.writelines(new_line)
newpg = str_replace_port_eng("input_test.html", "a")
输入文件(示例):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--[if lt IE 7 ]> <html class="ie6" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 7 ]> <html class="ie7" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 8 ]> <html class="ie8" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 9 ]> <html class="ie9" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html xmlns="http://www.w3.org/1999/xhtml"> <!--<![endif]-->
<body>
<div style="padding-top:0px;height:100%;" id="wrap">
<div style="padding-bottom:0px;" id="header" class="ie-dropdown-fix">
<!-- /// HEADER //////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div style="margin-left:10px;" class="row">
<div class="span3">
<!-- // Logo //
<a href="index.html" id="logo"><img src="_layout/images/logo.png" alt="" class="responsive-img" /></a>
-->
</div><!-- end .span3 -->
<div style="color:#00233C;width:1100px;background-color:#FFFFFF;margin-right:0px" class="span6">
<!-- // Dropdown Menu // -->
<ul style="color:#00233C;margin-left:10px;width:1100px;" id="dropdown-menu" class="fixed">
<li class="current"><a style="color:#00233C;" href="..."><i class="icon icon-home"></i> Início</a></li>
<li><a style="color:#00233C;margin-left:10px;" href="#"><i class="icon icon-question-sign"></i> Ajuda <small class="mute">+</small></a>
<ul class="sub-menu">
<li><a href="#">FAQ <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Classificação da Informação</a></li>
<li><a href="..." target="_blank">Reúso de Ativos Digitais</a></li>
<li><a href="..." target="_blank">Biblioteca</a></li>
</ul>
</li>
<li><a href="#">Alerta <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Criar Alerta</a></li>
<li><a href="..." target="_blank">Criar Alerta Múltiplo</a></li>
</ul>
</li>
<li><a href="..." target="_blank">Aviso ou Notícia</a></li>
<li><a href="#">Busca <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Busca Simples</a></li>
<li><a href="..." target="_blank">Busca Avançada</a></li>
</ul>
</li>
<li><a href="#">Documentos <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Carregar Novo Documento</a></li>
<li><a href="..." target="_blank">Editar Documento</a></li>
</ul>
</li>
</div>
</div>
</body>
</html>
预期输出:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--[if lt IE 7 ]> <html class="ie6" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 7 ]> <html class="ie7" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 8 ]> <html class="ie8" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if IE 9 ]> <html class="ie9" xmlns="http://www.w3.org/1999/xhtml"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html xmlns="http://www.w3.org/1999/xhtml"> <!--<![endif]-->
<body>
<div style="padding-top:0px;height:100%;" id="wrap">
<div style="padding-bottom:0px;" id="header" class="ie-dropdown-fix">
<!-- /// HEADER //////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
<div style="margin-left:10px;" class="row">
<div class="span3">
<!-- // Logo //
<a href="index.html" id="logo"><img src="_layout/images/logo.png" alt="" class="responsive-img" /></a>
-->
</div><!-- end .span3 -->
<div style="color:#00233C;width:1100px;background-color:#FFFFFF;margin-right:0px" class="span6">
<!-- // Dropdown Menu // -->
<ul style="color:#00233C;margin-left:10px;width:1100px;" id="dropdown-menu" class="fixed">
<li class="current"><a style="color:#00233C;" href="..."><i class="icon icon-home"></i> Start</a></li>
<li><a style="color:#00233C;margin-left:10px;" href="#"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a>
<ul class="sub-menu">
<li><a href="#">FAQ <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Information Security</a></li>
<li><a href="..." target="_blank">Digital Asset Reuse</a></li>
<li><a href="..." target="_blank">Library</a></li>
</ul>
</li>
<li><a href="#">Alerta <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Create Alert</a></li>
<li><a href="..." target="_blank">Create Multiple Alert</a></li>
</ul>
</li>
<li><a href="..." target="_blank">News</a></li>
<li><a href="#">Busca <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Simple Search</a></li>
<li><a href="..." target="_blank">Advanced Search</a></li>
</ul>
</li>
<li><a href="#">Documents <small class="mute">+</small></a>
<ul>
<li><a href="..." target="_blank">Load New Document</a></li>
<li><a href="..." target="_blank">Edit Document</a></li>
</ul>
</li>
</div>
</div>
</body>
</html>
实际输出:
<a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a><a href="..." style="color:#00233C;"><i class="icon icon-home"></i> Home</a><a href="#" style="color:#00233C;margin-left:10px;"><i class="icon icon-question-sign"></i> Help <small class="mute">+</small></a><a href="#">FAQ <small class="mute">+</small></a><a href="..." target="_blank">Information Security</a><a href="..." target="_blank">Reuse of Digital Assets</a><a href="..." target="_blank">Library</a><a href="#">Alert <small class="mute">+</small></a><a href="..." target="_blank">Create Alert</a><a href="..." target="_blank">Create Multiple Alert</a><a href="..." target="_blank">News</a><a href="#">Search <small class="mute">+</small></a><a href="..." target="_blank">Simple Search</a><a href="..." target="_blank">Advanced Search</a><a href="#">Documents <small class="mute">+</small></a><a href="..." target="_blank">Load New Document</a><a href="..." target="_blank">Edit Document</a>
现在我正在寻找代码中的错误,以及如何修复它。
提前致谢,
蒂亚戈
【问题讨论】:
-
with open(file_name, 'rb') as src:下的循环遍历所有您感兴趣的文件。但是,在该循环结束后,您将只得到最后一个文件的soup。这是故意的吗?因为,如果不是,那么您可能希望将其余代码置于该循环之下。 -
@Argon 感谢您的评论。我没有注意到帖子中看到的循环只会返回
soupobj。从代码中删除第一个for后,我看到了这个错误;结果是翻译后的字符串为一行。 -
为了能够搜索字符串,我从 html 中得到一个
soupobj 并对其进行迭代。最后,我需要整个 html,只是替换了字符串。代码给出的输出文件从带有替换字符串的第一行开始,在它之前的那些行后面。有没有办法遍历所有的 html 并替换字符串?我的意思是,不要迭代soup而是编辑它,使用 html 的(比方说)行作为参考?
标签: python html parsing beautifulsoup