имеют следующую структуру:
<P> <B><A name="p1"> 1</A> Heading</B>
<P> 1. Paragraph - Text Text Text
<OL>
<LI> Text
<LI> Text
<LI> Text
</OL>
<P> 2. Paragraph - Text Text Text
<OL>
<LI> Text
<LI> Text
</OL>
<P> <B><A name="p2"> 2</A> Heading</B>
<P> Text Text Text
<OL>
<LI> Text
<OL>
<LI> Text
<LI> Text
<LI> Text
</OL>
<LI> Text
<LI> Text
<LI> Text
</OL>
<P> Text Text
<P> <B><A name="p3"> 3</A> Heading</B>
<P> Text Text Text
<OL>
<LI> Text
<LI> Text
</OL>
Здесь я хотел бы объединить <A name="p1">
, <P>
, <LI>
каждый в один текстовый блок, поэтому <A name="p1">
со всеми <P>
и <OL>
элементов будет один текстовый блок, <A name="p2">
один текстовый блок и так далее. Однако бывает, что элементы <LI>
из блока 3 скользят в блоке 2 после последнего элемента <P>
. У кого-нибудь есть идеи, как я могу перехватить это с помощью запроса?
Код:
for para_item in soup.select('a[name]'):
if para_item.attrs["name"].find("p") >= 0:
print(para_item)
inner_p = para_item.find_next("p")
while inner_p:
print(inner_p.text.strip())
try:
for i, list_item in enumerate(inner_p.find_next('ol')):
if list_item and i < len(inner_p.find_next('ol'))-1:
print(list_item.find_next("li").text.strip())
except:
pass
try:
inner_p = inner_p.find_next("p")
inner_a = inner_p.find_next("a")
if len(inner_a.attrs) > 0:
#print(inner_a.attrs["name"])
if inner_a.attrs["name"].find("p") >= 0 or inner_a.attrs["name"].find("aa") >=0:
#print(inner_a.attrs["name"])
break
except:
pass