Я пишу скрипт на Python, используя pdfminer.six для конвертации огромного количества PDF-файлов в html для последующей загрузки их в интернет-магазин.До сих пор основные текстовые блоки были проанализированы довольно хорошо, но в процессе я должен был заменить все промежутки на div (и убрать промежутки из их атрибутов) по очевидным причинам, поэтому теперь структура документа выглядит следующим образом:
<div> #first main block
<div>
Product desc heading
</div>
<div>
Product desc text
</div>
#etc etc
</div>
<div> #second main block
<div>
Product specs heading
</div>
<div>
Product specs text
</div>
#etc etc
</div>
Проблема заключается в навигации в идентичных div.Если я попытаюсь найти самый первый div и добавить к нему некоторые атрибуты, например, docs предложить:
firstdiv = soup.find('div')
firstdiv['class'] = 'main_productinfo'
Результат вполне предсказуемый - IDLE выводит следующую ошибку:
File "C:\Users\blabla\AppData\Local\Programs\Python\Python37\lib\site-packages\bs4\element.py", line 1036, in __setitem__
self.attrs[key] = value
TypeError: 'NoneType' object does not support item assignment
, поскольку метод find()
не возвращает определенного результата (может найти или не найти).
Я хочу деформировать первый блок в каждом файле и затем проанализироватьтаблиц (находится в блоке спецификации ниже) в HTML и объединить эти две в каждом загружаемом файле.Как я могу добавить атрибуты к первому тегу, не конвертируя суп в строку снова и снова (и, таким образом, делая его действительно, очень уродливым, поскольку он конвертирует недавно улучшенный суп без каких-либо пробелов) и заменяя части строки в str(soup)
?Я довольно новичок в Python, и ничего не приходит на ум.
UPD: я использую Python 3.7.2 на Win 7 64.