I have an XML that consists of a <div>
in which <div><head>
occur. These <div><head>
might or might not be followed by a <lb>
.
Ideally, I'd like a list of all <div><head/> ... </div>
<div><div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"/><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"/>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"/>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref type="biblical" cRef="Rm_13,8-10">Röm 13,8-10</ref>; <ref type="biblical" cRef="Gal_5,14">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"/>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"/>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref type="biblical" cRef="Ps_1,3">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb/><note place="margin-left" facs="#facs_21_r1">
<lb/>Psalm. 1.</div> <div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"/><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"/>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"/>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref type="biblical" cRef="Rm_13,8-10">Röm 13,8-10</ref>; <ref type="biblical" cRef="Gal_5,14">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"/>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"/>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref type="biblical" cRef="Ps_1,3">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb/><note place="margin-left" facs="#facs_21_r1">
<lb/>Psalm. 1.</div></div>
so I did print(soup.find_all('div'))
which returns the list of all divs but removes the <head>
:
<div>
<lb facs="#facs_21_line_1624455438683_402" n="N001"></lb><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"></lb>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"></lb>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref cref="Rm_13,8-10" type="biblical">Röm 13,8-10</ref>; <ref cref="Gal_5,14" type="biblical">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"></lb>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"></lb>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref cref="Ps_1,3" type="biblical">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb></lb><note facs="#facs_21_r1" place="margin-left">
<lb></lb>Psalm. 1.</div>
I think some questions come up:
How can I group my soup by
<div><head>some tags and text ...</head>some more text</div>
Why is the
<head>
vanishing?
CodePudding user response:
Behavior comes from the bs4
standard parser lxml
in my opinion, so if you switch to html.parser
you should see the <head>
:
soup = BeautifulSoup(html,'html.parser')
You could use css selectors
to chain your condition:
soup.select('div:has(>head)')
Example
from bs4 import BeautifulSoup
html = '''
<div><div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"/><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"/>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"/>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref type="biblical" cRef="Rm_13,8-10">Röm 13,8-10</ref>; <ref type="biblical" cRef="Gal_5,14">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"/>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"/>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref type="biblical" cRef="Ps_1,3">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb/><note place="margin-left" facs="#facs_21_r1">
<lb/>Psalm. 1.</div> <div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"/><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"/>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"/>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref type="biblical" cRef="Rm_13,8-10">Röm 13,8-10</ref>; <ref type="biblical" cRef="Gal_5,14">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"/>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"/>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref type="biblical" cRef="Ps_1,3">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb/><note place="margin-left" facs="#facs_21_r1">
<lb/>Psalm. 1.</div></div>
'''
soup = BeautifulSoup(html,'html.parser')
soup.select('div:has(>head)')
Output
[<div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"></lb><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"></lb>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"></lb>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref cref="Rm_13,8-10" type="biblical">Röm 13,8-10</ref>; <ref cref="Gal_5,14" type="biblical">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"></lb>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"></lb>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref cref="Ps_1,3" type="biblical">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb></lb><note facs="#facs_21_r1" place="margin-left">
<lb></lb>Psalm. 1.</note></w></p></div>,
<div><head facs="#facs_21_TextRegion_1624455438571_399">
<lb facs="#facs_21_line_1624455438683_402" n="N001"></lb><supplied reason="article_added">7</supplied> Von der Liebe und guten wercken.</head>
<p facs="#facs_21_TextRegion_1624455467191_408">
<lb facs="#facs_21_r3l25" n="N001"></lb>Die Liebe, die da ist das ende des Gebots und die
<lb facs="#facs_21_r3l26" n="N002"></lb>volkommenheyt des Gesetzs,<note type="annotation">Vgl. <ref cref="Rm_13,8-10" type="biblical">Röm 13,8-10</ref>; <ref cref="Gal_5,14" type="biblical">Gal 5,14</ref>.</note> so bald sie inn der
<lb facs="#facs_21_r3l28" n="N003"></lb>rechtfertigung eintritt, so ist sie fruchtbar und
<lb facs="#facs_21_r3l29" n="N004"></lb>beschleüsset inn sich selbs die samen aller guten werck,<note type="annotation">Vgl. <ref cref="Ps_1,3" type="biblical">Ps 1,3</ref>.</note> <w>wel<pc>-</pc>
<lb></lb><note facs="#facs_21_r1" place="margin-left">
<lb></lb>Psalm. 1.</note></w></p></div>]