BS4 поиск и замена атрибутов <img>'sr c' и 'style' - PullRequest
0 голосов
/ 30 марта 2020

Я пытался найти и заменить некоторые <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(&quot;/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-2.png&quot;); background-size: contain; display: none;" id="op-1" draggable="true">&nbsp;</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(&quot;/static/media/giampaolo.ferradini/PDF_version_2.0_12_Pages_wlT4Fq0/crops/1-4.png&quot;); background-size: contain; display: none;" id="op-3" draggable="true">&nbsp;</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>
...