So basically I’m trying to scrape a webpage with Python and I’m getting stucked at finding the number of childs of one element in a list using BeautifulSoup, the HTML of the list follows this:
<table id="MyTable">
   <thead>
      <tr>...</tr>
   </thead>
   <tfoot>
      <tr>...</tr>
   </tfoot>
   <tbody>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
   </tbody>
</table>
In my case I want to get the number of tr inside tag tbody, but since it has no id, I found no way to get it with soup and then do a findAll("tr"). Pretty sure this should be easy but can’t find a way, how should I do it?
Advertisement
Answer
You could check the len() of your resultSet from selecting all <tr> in the <tbody>:
len(soup.select('#MyTable > tbody tr'))
Example
from bs4 import BeautifulSoup
html='''
<table id="MyTable">
   <thead>
      <tr>...</tr>
   </thead>
   <tfoot>
      <tr>...</tr>
   </tfoot>
   <tbody>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
      <tr>...</tr>
   </tbody>
</table>
'''
soup = BeautifulSoup(html)
len(soup.select('#MyTable > tbody tr'))
Output
7