Этот скрипт распечатает все <docnum>
, <p>
и <docdesc>
для каждого индивидуума <doc>
:
from bs4 import BeautifulSoup
txt = '''<doc>
<docnum>1234</docnum>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<p>text4</p>
<p>text5</p>
<docdesc>only text</docdesc>
</doc>
<doc>
<docnum>789</docnum>
<p>text1</p>
<p>text2</p>
<p>text3</p>
<p>text4</p>
<p>text5</p>
<docdesc>only and only texts</docdesc>
</doc>'''
soup = BeautifulSoup(txt, 'html.parser')
for doc in soup.select('doc'):
print('docnum :', doc.docnum.text)
print('text :', [p.text for p in doc.select('p')])
print('docdesc:', doc.docdesc.text)
print('-' * 80)
Печать:
docnum : 1234
text : ['text1', 'text2', 'text3', 'text4', 'text5']
docdesc: only text
--------------------------------------------------------------------------------
docnum : 789
text : ['text1', 'text2', 'text3', 'text4', 'text5']
docdesc: only and only texts
--------------------------------------------------------------------------------
РЕДАКТИРОВАТЬ: Чтобы хранить данные в списках, вы можете:
docnums = []
doctexts = []
for doc in soup.select('doc'):
docnums.append(doc.docnum.text)
doctexts.append([p.text for p in doc.select('p')])
for n, t in zip(docnums, doctexts):
print(n)
print(' '.join(t))