Python - парсинг ввода html данных с BeautifulSoup в текст - PullRequest
0 голосов
/ 24 марта 2020

имеют следующую структуру:

 <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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...