2016-04-20 3 views
0

Ich baue ein Programm, um Webseiten zu kratzen.BeautifulSoup4: Finde Elemente mit Kindern Tags

Ich brauche alle tr Elemente auf einer Seite zu finden, die td Kinder mit class="table"

<tr> 
    <td class="table">1</td> 
    <td class="table"> 
     <a href="...">...</a> 
    </td> 
    <td class="table">18</td> 
</tr> 

haben schon ich es geschafft, alle td mit class=table Elemente zu finden, mit

MySoup = soup.find_all("td", { "class" : "table" }) 

und auch alle tr

MySoup = soup.find_all("tr") 

aber es gibt zu viele in der ganzen Seite, und das ist nicht genau das, was ich brauche sowieso ...

Antwort

3

Ich brauche auf einer Seite alle tr Elemente zu finden, die Kinder mit class = „table“ td haben

soup.select('tr td.table') 

Wenn Sie alle TDs, die dann direkt für Kinder von tr sind verwenden

soup.select('tr > td.table') 

Beispiel:

>>> html = '''<tr> 
    <td class="table">1</td> 
    <td class="table"> 
     <a href="...">...</a> 
    </td> 
    <td class="table">18</td> 
</tr><td class="table">19</td>''' 
>>> soup = BeautifulSoup(html, 'lxml') 
>>> soup.select('tr td.table') 
[<td class="table">1</td>, <td class="table">\n<a href="...">...</a>\n</td>, <td class="table">18</td>] 
>>> 
+0

'soup.select ('tr td.table')' nicht die Auswahl machen, da ich die ganze Quelle im Ergebnis sehe (und nicht nur die 'tr'with Kinder 'td'). –

+0

weil die ganze Quelle in einem tr vorhanden ist. –