Я пытался найти и заменить некоторые <img>
атрибуты в html файле информацией, которую я получил из второго html файла. Я использую lxml
от BeautifulSoup, но я явно делаю что-то не так и не могу понять, что.
Я пробовал три разные версии. Некомментированный, по крайней мере, не выдает ошибок, но результирующий файл html не изменяется. Я полагаю, это не относится к изменениям в супе?
Справка или просто некоторые указатели будут оценены.
Редактировать: Благодаря @Tserenjamts я понял, что код корректно исправляет html , но вместо изменения оригинала он добавляет новую версию после . Я могу жить с этим, в случае (запись в другой файл или стирание оригинала перед его записью), но это кажется неожиданным. Что мне не хватает? Должен ли я использовать replace
вместо непосредственного присвоения нового значения, такого как в этом ответе SO ?
Мой код:
'''
get <img> attribute from ocrd file and apply them to final file
'''
from bs4 import BeautifulSoup as bs
clean = 'ver1.html'
ocrd = 'ver1-before.html'
with open(ocrd, 'r') as source:
hocr = source.read()
soup2 = bs(hocr, 'lxml')
with open(clean, 'r+') as final:
html = final.read()
soup = bs(html, 'lxml')
images = soup.find_all('img')
for i in images:
img = soup2.find('img', src=i['src'])
style = img['style']
path = i['src'][i['src'].find('crops/'):]
print('new path:', path) # [-20:]
print('style:', style)
print('i', i)
# third trial
i['src'] = path
i['style'] = style
# second trial
# i.set('src', path)
# i.set('style', style)
# first trial
# el = soup.find('img', src=i['src'])
# el.set('src', path)
# el.set('style', style)
# print('el:', el)
final.write(str(soup))
Образец 'ver1. html 'file:
<p class="dropzone hidden_finalize" style="display: none;"></p><p class="ocr_par" id="op-0" title="bbox 157 589 579 720" draggable="true" lang="eng">
<span class="ocr_line" id="line_1_1" title="bbox 157 589 557 617; baseline -0.003 -5; x_size 27; x_descenders 5; x_ascenders 6">
<span class="ocrx_word" id="word_1_1" title="bbox 157 589 289 617; x_wconf 96">According</span>
<span class="ocrx_word" id="word_1_2" title="bbox 300 590 324 612; x_wconf 96">to</span>
<span class="ocrx_word" id="word_1_3" title="bbox 335 589 459 612; x_wconf 95">electronic</span>
<span class="ocrx_word" id="word_1_4" title="bbox 470 589 557 612; x_wconf 96">control</span>
</span>
<span class="ocr_line" id="line_1_2" title="bbox 159 625 579 653; baseline 0 -6; x_size 28; x_descenders 6; x_ascenders 6">
<span class="ocrx_word" id="word_1_5" title="bbox 159 625 218 653; x_wconf 96">logic</span>
<span class="ocrx_word" id="word_1_6" title="bbox 228 625 275 648; x_wconf 96">and</span>
<span class="ocrx_word" id="word_1_7" title="bbox 286 625 316 648; x_wconf 96">air</span>
<span class="ocrx_word" id="word_1_8" title="bbox 327 625 439 653; x_wconf 96">recycling</span>
<span class="ocrx_word" id="word_1_9" title="bbox 451 625 579 653; x_wconf 96">principles,</span>
</span>
<span class="ocr_line" id="line_1_3" title="bbox 157 661 568 689; baseline 0 -6; x_size 28; x_descenders 6; x_ascenders 6">
<span class="ocrx_word" id="word_1_10" title="bbox 157 661 198 684; x_wconf 96">the</span>
<span class="ocrx_word" id="word_1_11" title="bbox 207 661 320 689; x_wconf 96">following</span>
<span class="ocrx_word" id="word_1_12" title="bbox 332 661 396 684; x_wconf 96">chart</span>
<span class="ocrx_word" id="word_1_13" title="bbox 407 661 518 689; x_wconf 96">analyses</span>
<span class="ocrx_word" id="word_1_14" title="bbox 528 661 568 683; x_wconf 96">the</span>
</span>
<span class="ocr_line" id="line_1_4" title="bbox 159 698 317 720; baseline 0 0; x_size 28.32962; x_descenders 6.3296204; x_ascenders 5">
<span class="ocrx_word" id="word_1_15" title="bbox 159 698 209 720; x_wconf 96">root</span>
<span class="ocrx_word" id="word_1_16" title="bbox 219 703 317 720; x_wconf 96">causes.</span>
</span>
</p>
<p class="dropzone hidden_finalize" style="display: none;"></p>
<img src="http://127.0.0.1:8000/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-2.png" style="width: 745px; height: 415px;" class="show_finalize"><p class="image_p hidden_finalize" style="width: 745px; height: 415px; background-image: url("/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-2.png"); background-size: contain; display: none;" id="op-1" draggable="true"> </p>
<p class="dropzone hidden_finalize" style="display: none;"></p>
<p class="ocr_par" id="op-2" title="bbox 159 1361 527 1389" draggable="true" lang="eng">
<span class="ocr_line" id="line_1_1" title="bbox 159 1361 527 1389; baseline 0 -6; x_size 28; x_descenders 6; x_ascenders 6">
<span class="ocrx_word" id="word_1_1" title="bbox 159 1361 263 1389; x_wconf 96">Priority</span>
<span class="ocrx_word" id="word_1_2" title="bbox 272 1361 388 1389; x_wconf 96">analysis</span>
<span class="ocrx_word" id="word_1_3" title="bbox 398 1367 430 1383; x_wconf 96">as</span>
<span class="ocrx_word" id="word_1_4" title="bbox 441 1361 527 1383; x_wconf 96">below</span>
</span>
</p>
<p class="dropzone hidden_finalize" style="display: none;"></p>
<img src="http://127.0.0.1:8000/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-4.png" style="width: 746px; height: 449px;" class="show_finalize"><p class="image_p hidden_finalize" style="width: 746px; height: 449px; background-image: url("/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-4.png"); background-size: contain; display: none;" id="op-3" draggable="true"> </p>
И ver1. html file:
<p>According to electronic control logic and air recycling principles, the following chart analyses the root causes.</p>
<p><img src="http://127.0.0.1:8000/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-2.png"></p>
<p>Priority analysis as below</p>
<p><img src="http://127.0.0.1:8000/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-4.png"></p>