2017-11-24 4 views
1

Ich möchte die Daten, die dort in den verschachtelten divs ist Ich kann es nicht bekommen.Schöne Suppe verschachtelt div rekursiv erhalten Text

Es gibt verschachtelte div Ich brauche die Daten ordnungsgemäß formatiert werden.

Ich habe das BS4 Modul geschrieben, aber ich habe einen Fehler

BeautifulSoup: Attribute: 'NavigableString' Objekt hat kein Attribut 'name'

Bitte helfen Sie mir!

Mein 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> 

My Beautiful Soup-Code

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 

Ich möchte die Ausgabe wie diese

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 

Und so weiter.

Wenn ich 100 Divs innerhalb der <div id = "new"> habe, brauche ich den Ausgang wie folgt.

+0

Warum haben Sie all diese For-Schleifen mit 'Break' nach der 1. Iteration? Sie könnten einfach 'find' verwenden, zB:' tag.find ("div", {"class": "name"}). Text' –

+0

Danke @tmadam Ich habe es versucht, aber ich brauche den Inhalt div von div –

Antwort

0

Sie können dies tun. Dies wird Daten für jedes Div zurückgeben.

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

Ich habe es versucht Ich möchte nur das Div durch Div @Manoj –