2017-11-24 1 views
1

중첩 된 div에있는 데이터를 가져올 수 없습니다. 가져올 수 없습니다.아름다운 스프 중첩 된 재귀 적 텍스트 가져 오기

중첩 된 div가 있습니다. 올바른 형식의 데이터가 필요합니다.

은 내가 BS4 모듈을 작성한 그러나 나는 오류

BeautifulSoup로 가지고 : AttributeError를 'NavigableString'개체가 어떤 속성의 이름으로 '친절하게 도와주세요

이 없습니다!

내 HTML

<div id="new"> 
    <div id="newDat"> 
     <div class="Data"> 
      <div class="DataNew"> 
       <div class="DataNew new"> 
        <div class="Data Left"> 
         <div class="name"><a class="name" href="">Jack Daniels</a></div> 
         <div class="details"><span class="loc">Barcelona</span></div> 
         <div class="header"><a class="looking"> Looking for meeting new people</a></div> 
         <div class="ideas"><a class="ideas">I have new ideas</a></div> 
         <div class="profile"> <em class="profilss"></em>MS in cs<br></div> 

        </div> 
        <div class="Data Right"> 
         <a class="phone"><span class="txt">+123123123123123231</span></a> 
        </div> 
       </div> 

      </div> 
     </div> 
     <div class="DataOne"> 
      <div class="DataNew"> 
       <div class="DataNew new"> 
        <div class="Data Left"> 
         <div class="name"><a class="name" href="">Jack Daniels</a></div> 
         <div class="details"><span class="loc">Barcelona</span></div> 
         <div class="header"><a class="looking"> Looking for meeting new people</a></div> 
         <div class="ideas"><a class="ideas">I have new ideas</a></div> 
         <div class="profile"> <em class="profilss"></em>MS in cs<br></div> 

        </div> 
        <div class="Data Right"> 
         <a class="phone"><span class="txt">+123123123123123231</span></a> 
        </div> 
       </div> 

      </div> 
     </div> 
     <div class="DataTwo"> 
      <div class="DataNew"> 
       <div class="DataNew new"> 
        <div class="Data Left"> 
         <div class="name"><a class="name" href="">Jack Daniels</a></div> 
         <div class="details"><span class="loc">Barcelona</span></div> 
         <div class="header"><a class="looking"> Looking for meeting new people</a></div> 
         <div class="ideas"><a class="ideas">I have new ideas</a></div> 
         <div class="profile"> <em class="profilss"></em>MS in cs<br></div> 

        </div> 
        <div class="Data Right"> 
         <a class="phone"><span class="txt">+123123123123123231</span></a> 
        </div> 
       </div> 
      </div> 
     </div> 
     <div class="DataThree"> 
      <div class="DataNew"> 
       <div class="DataNew new"> 
        <div class="Data Left"> 
         <div class="name"><a class="name" href="">Jack Daniels</a></div> 
         <div class="details"><span class="loc">Barcelona</span></div> 
         <div class="header"><a class="looking"> Looking for meeting new people</a></div> 
         <div class="ideas"><a class="ideas">I have new ideas</a></div> 
         <div class="profile"> <em class="profilss"></em>MS in cs<br></div> 

        </div> 
        <div class="Data Right"> 
         <a class="phone"><span class="txt">+123123123123123231</span></a> 
        </div> 
       </div> 

      </div> 
     </div> 
    </div> 
</div> 

내 아름다운 수프 코드

li = page.find('div', {'id': 'new'}) 
    for tag in li: 
     for i in tag.find_all("div", {"class": "name"}): 
      print i.getText() 
      break 

     for i in tag.find_all("div", {"class": "details"}): 
      print i.getText() 
      break 

     for i in tag.find_all("div", {"class": "header"}): 
      print i.getText() 
      break 


     for i in tag.find_all("div", {"class": "ideas"}): 
      print i.getText() 
      break 


     for i in tag.find_all("div", {"class": "profile"}): 
      print i.getText() 
      break 

     for i in tag.find_all("div", {"class": "phone"}): 
      print i.getText() 
      break 

내가 원하는 등등이

Div one 
Name : Jack Daniels 
Details : Barcelona 
header : Looking for meeting new people 
ideas : I have new ideas 
profile: MS in cs 
tel : +123123123123123231 

Div two 
Name : Jack Daniels 
Details : Barcelona 
header : Looking for meeting new people 
ideas : I have new ideas 
profile: MS in cs 
tel : +123123123123123231 

와 같은 출력.

<div id = "new"> 안에 100 개의 Div가있는 경우이 출력이 필요합니다.

+0

왜 첫 번째 반복 이후에 'for'루프가있는 모든 루프가 있습니까? 'find '를 사용할 수 있습니다 :'tag.find ("div", { "class": "name"}). 텍스트' –

+0

고마워요 @ tmadam 시도했지만 div로 콘텐츠 div가 필요합니다 –

답변

0

이 작업을 수행 할 수 있습니다. 그러면 모든 div에 대한 데이터가 반환됩니다.

from bs4 import BeautifulSoup 
soup = BeautifulSoup(b) // b is html 
rows =soup.find_all('div', {'class': 'DataNew'}) 
for tag in rows: 
    for tag in li: 
    for i in tag.find_all("div", {"class": "name"}): 
     print i.getText() 
     break 

    for i in tag.find_all("div", {"class": "details"}): 
     print i.getText() 
     break 

    for i in tag.find_all("div", {"class": "header"}): 
     print i.getText() 
     break 


    for i in tag.find_all("div", {"class": "ideas"}): 
     print i.getText() 
     break 


    for i in tag.find_all("div", {"class": "profile"}): 
     print i.getText() 
     break 

    for i in tag.find_all("div", {"class": "Data Right"}): 
     print i.getText() 
     break 
+0

나는 div로 div를 원한다. @Manoj –