Редактирование HTML в Python - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над кодом для перевода строк в HTML.

Более конкретно, моя цель - выполнить замену строк.Шаги: синтаксический анализ файла, идентификация строки в строке (если она есть) и, наконец, замена этой строки ее переведенной версией, взятой из словаря.

Я получил ценную помощь здесь , при разборе html и замене строк для каждой строки.

Чтобы открыть html-файл как текстовый файл и пролистать его построчно, я взял пример здесь .

Используя знания обоих примеров, я написалкод ниже:

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>

А теперь я ищу ошибку в коде и как я могу ее исправить.

Заранее спасибо,

Tiago

1 Ответ

0 голосов
/ 03 июля 2019

Лучшее решение, которое я нашел, было скопировать содержимое из файла .html, вставить его в файл .py и начать с него редактирование.

from bs4 import BeautifulSoup
from html_dictionary import port_eng    # Dictionary
from html_input_file import raw_text    # Input file: .py file with string
                                        # defined by triple quotes (""" """)

rtx = list(raw_text.split('\n'))
ans_list = []                           # List of lines with replaced string
off_list = []                           # List of items not found in dictionary, and index of occurrence

for raw_line in rtx:
    soup = BeautifulSoup(raw_line, "lxml")
    tag_cont = soup.text                # tag content
    tag_cont = tag_cont.strip('+')
    tag_cont = tag_cont.strip(' ')

    if tag_cont in port_eng.keys():
        en_word = port_eng[tag_cont]
        new_item = str(raw_line).replace(tag_cont, en_word)

    else:l
        en_word = tag_cont
        new_item = str(raw_line).replace(tag_cont, en_word)
        if tag_cont not in off_list:    
            off_list.append(tuple([tag_cont, rtx.index(raw_line)]))

    ans_list.append(new_item)

return ans_list, off_list

Я беру вывод непосредственно с экрана через print() и копирую его в новый файл .html - это не самое элегантное решение, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...