2016-03-18 6 views
5

Hallo also ich find_all auf eine beautifulsoup object, und finde etwas, das ist eine bs4.element.ResultSet object oder eine list.beasesoup: find_all auf bs4.element.ResultSet Objekt oder Liste?

Ich möchte find_all weiter dort tun, aber es ist nicht auf eine bs4.element.ResultSet object erlaubt. Ich kann jedes Element der bs4.element.ResultSet object durchlaufen, um find_all zu tun. Kann ich Schleifen vermeiden und sie einfach wieder in beautifulsoup object konvertieren?

Siehe Code für Details bitte. Dank

html_1 = """ 
<table> 
    <thead> 
     <tr class="myClass"> 
      <th>A</th> 
      <th>B</th> 
      <th>C</th> 
      <th>D</th> 
     </tr> 
    </thead> 
</table> 
""" 
soup = BeautifulSoup(html_1, 'html.parser') 

type(soup) #bs4.BeautifulSoup 

# do find_all on beautifulsoup object 
th_all = soup.find_all('th') 

# the result is of type bs4.element.ResultSet or similarly list 
type(th_all) #bs4.element.ResultSet 
type(th_all[0:1]) #list 

# now I want to further do find_all 
th_all.find_all(text='A') #not work 

# can I avoid this need of loop? 
for th in th_all: 
    th.find_all(text='A') #works 

Antwort

8

ResultSet-Klasse ist eine Unterklasse einer Liste und kein Tag class, die die find* Methoden definiert hat. Looping durch die Ergebnisse von find_all() ist die häufigste Methode:

th_all = soup.find_all('th') 
result = [] 
for th in th_all: 
    result.extend(th.find_all(text='A')) 

Normalerweise CSS selectors können Sie es in einem Rutsch, außer dass nicht alles, was Sie mit find_all() tun können, mit der select() Methode ist möglich lösen helfen. Zum Beispiel gibt es keine "Text" -Suche in CSS-Selektoren bs4. Aber wenn zum Beispiel Sie hatten alle zu finden, sagen wir, b Elemente innerhalb th Elemente, könnten Sie tun:

soup.select("th td") 
+0

Nach dem Kopieren des Ergebnisses der soup.find_all th_all, werden Änderungen reflektieren, um th_all Suppe? –

+0

Ja wird es. Hängt davon ab, welche Funktion Sie verwenden. Siehe: https://beautiful-soup-4.readthedocs.io/en/latest/#modifying-the-tree –

Verwandte Themen