Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you get all the rows from a particular table using BeautifulSoup?

Tags:

I am learning Python and BeautifulSoup to scrape data from the web, and read a HTML table. I can read it into Open Office and it says that it is Table #11.

It seems like BeautifulSoup is the preferred choice, but can anyone tell me how to grab a particular table and all the rows? I have looked at the module documentation, but can't get my head around it. Many of the examples that I have found online appear to do more than I need.

like image 215
Btibert3 Avatar asked Jan 06 '10 01:01

Btibert3


People also ask

How do I find a specific element with Beautiful Soup?

To find elements that contain a specific text in Beautiful Soup, we can use find_all(~) method together with a lambda function.


1 Answers

This should be pretty straight forward if you have a chunk of HTML to parse with BeautifulSoup. The general idea is to navigate to your table using the findChildren method, then you can get the text value inside the cell with the string property.

>>> from BeautifulSoup import BeautifulSoup >>>  >>> html = """ ... <html> ... <body> ...     <table> ...         <th><td>column 1</td><td>column 2</td></th> ...         <tr><td>value 1</td><td>value 2</td></tr> ...     </table> ... </body> ... </html> ... """ >>> >>> soup = BeautifulSoup(html) >>> tables = soup.findChildren('table') >>> >>> # This will get the first (and only) table. Your page may have more. >>> my_table = tables[0] >>> >>> # You can find children with multiple tags by passing a list of strings >>> rows = my_table.findChildren(['th', 'tr']) >>> >>> for row in rows: ...     cells = row.findChildren('td') ...     for cell in cells: ...         value = cell.string ...         print("The value in this cell is %s" % value) ...  The value in this cell is column 1 The value in this cell is column 2 The value in this cell is value 1 The value in this cell is value 2 >>>  
like image 137
JJ Geewax Avatar answered Sep 19 '22 13:09

JJ Geewax