Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Parse HTML Table

Posted on 2006-06-02
3
Medium Priority
?
8,163 Views
Last Modified: 2011-10-03
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--------------->
0
Comment
Question by:fakir420
  • 2
3 Comments
 
LVL 1

Author Comment

by:fakir420
ID: 16820734
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
 
LVL 14

Accepted Solution

by:
RichieHindle earned 2000 total points
ID: 16820917
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
 
LVL 1

Author Comment

by:fakir420
ID: 16821039
Thanks, this works perfectly!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Less strange, but still introduction This introduction was added (1st August, 2011) to reflect some reactions.  Firstly, the term basics in the title of the article...  As any other word, it is a symbol with meaning attached to the word by some a…
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
Learn the basics of strings in Python: declaration, operations, indices, and slicing. Strings are declared with quotations; for example: s = "string": Strings are immutable.: Strings may be concatenated or multiplied using the addition and multiplic…
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question