Parse HTML Table

I need example code to parse the following HTML table into a list or array - I'm not sure the best way as I'm new to Python coming from VB.  So far I've been able to get the HTML and split out just the table portion, but I now need to parse the table into (preferrably) a comma delimited list of the tables rows/columns.  I would really like to see and example including parsing out all the unwanted text and just the column headings/column data text.  Also any comments in the code to show me what is going on would help out alot.

Here is the output I'd like to get - this is the first two rows of the table:

Date|Time|From|Duration (hh:mm:ss)
Jun 02, 2006|02:53 PM|13012684637|00:01:00


<---------------Start Table--------------->      
        <table width="100%" id="received_calls" border="0" cellpadding="1" cellspacing="2">
                        <tr class="tableheader2">
                              <td align=left colspan=5 class="tableheader2">Received Calls</td>
                </tr>
               
                           
                            <tr>
                                <TD nowrap class="tableheader9" width="20%" >Date</TD>
                                <TD nowrap class="tableheader9" width="20%" >Time</TD>
                             
                                       <TD nowrap class="tableheader9" width="35%" >
                                               <div class="iconButton"></div><div class="iconButton"></div>From</TD>
                               
                                <TD nowrap class="tableheader9" width="25%" >Duration (hh:mm:ss)</TD>
                            </tr>
                           
                            <tr class="tablebody1">
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >03:56 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:02:00</TD>
                            </tr>
                           
                            <tr >
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >02:53 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr class="tablebody1">
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >12:29 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr >
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >11:55 AM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>15408774179<br><br><b>PCS PHONE    VA</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>15408774179<br><br><b>PCS PHONE    VA</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">15408774179</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:06:00</TD>
                            </tr>
                           
                            <tr class="tablebody1">
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >11:41 AM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr >
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >11:41 AM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr class="tablebody1">
                               
                               
                               
                                <TD nowrap >Jun 02, 2006&nbsp;</TD>
                                <TD nowrap >11:40 AM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr >
                               
                               
                               
                                <TD nowrap >Jun 01, 2006&nbsp;</TD>
                                <TD nowrap >05:49 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>18666894118<br><br><b>800 SERVICE</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>18666894118<br><br><b>800 SERVICE</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">18666894118</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr class="tablebody1">
                               
                               
                               
                                <TD nowrap >Jun 01, 2006&nbsp;</TD>
                                <TD nowrap >04:48 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                            <tr >
                               
                               
                               
                                <TD nowrap >Jun 01, 2006&nbsp;</TD>
                                <TD nowrap >04:48 PM&nbsp;</TD>
                           
                                    <TD nowrap ><!-- forward call setion -->
                                         

                                         <!--  from caller setion -->

                                           
                                      <div class="iconButton"><a href="javascript:void(0)" onclick="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', STICKY, CSSCLASS);" onmouseover="return overlib('<CENTER>13012684637<br><br><b>CELL PHONE   MD</b>', CSSCLASS);" onmouseout="return nd();"><img src="/static/common-web/images/activity_icons/icon_caller_id.gif" border="0" ></a></div>

                                         <div class="iconButton"><img src="/static/common-web/images/activity_icons/icon_filler.gif" border="0" ></div>
                                             
                                          <div class="phoneNumber">13012684637</div>
                                    </TD>
                               
                                    <TD nowrap > 
                                                 00:01:00</TD>
                            </tr>
                           
                           

                           
                       
                  </table>
<---------------End Table--------------->
LVL 1
fakir420Asked:
Who is Participating?
 
RichieHindleCommented:
This kind of thing is best done with BeautifulSoup.py, which you get here:

  http://www.crummy.com/software/BeautifulSoup/download/BeautifulSoup.py

Download that first, then here's a script that does what you ask:

import re
from BeautifulSoup import BeautifulSoup

def allText(tag):
    """Converts a tag into text by walking all the text-owning subtags."""
    text = ''.join([text for text in tag.findAll(text=re.compile(r'.+'))])
    text = text.replace('&nbsp;', ' ')
    return text.strip()

def parse(html):
    # First remove some HTML constructs that BeautifulSoup doesn't like.
    html = re.sub('<!--.*?-->', '', html)
    html = re.sub(r'(onclick|onmouseover)="[^"]*"', '', html)
   
    # Now get BeautifulSoup to do the heavy lifting.
    soup = BeautifulSoup(html)
    for tr in soup('tr')[1:]:   # Ignore the first row
        print '|'.join([allText(cell) for cell in tr('td')])

HTML = """
                        ...your HTML goes here...
"""

if __name__ == '__main__':
    parse(HTML)
0
 
fakir420Author Commented:
Actually I guess I need a pipe delimited list - as shown in my example.  I changed this once I realized the "Date" had a comma in it but forgot to change this in the original post.
0
 
fakir420Author Commented:
Thanks, this works perfectly!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.