2013-06-19 11 views
6

Desidero estrarre determinate informazioni da un documento html. Per esempio. esso contiene una tabella (tra gli altri tavoli con altri contenuti) come questo:Estrazione del contenuto della tabella da html con python e BeautifulSoup

<table class="details"> 
      <tr> 
        <th>Advisory:</th> 
        <td>RHBA-2013:0947-1</td> 
      </tr> 
      <tr>  
        <th>Type:</th> 
        <td>Bug Fix Advisory</td> 
      </tr> 
      <tr> 
        <th>Severity:</th> 
        <td>N/A</td> 
      </tr> 
      <tr>  
        <th>Issued on:</th> 
        <td>2013-06-13</td> 
      </tr> 
      <tr>  
        <th>Last updated on:</th> 
        <td>2013-06-13</td> 
      </tr> 

      <tr> 
        <th valign="top">Affected Products:</th> 
        <td><a href="#Red Hat Enterprise Linux ELS (v. 4)">Red Hat Enterprise Linux ELS (v. 4)</a></td> 
      </tr> 


    </table> 

voglio estrarre informazioni come la data di "Emesso il:". Sembra che BeautifulSoup4 possa farlo facilmente, ma in qualche modo non riesco a farlo bene. Il mio codice finora:

from bs4 import BeautifulSoup 
    soup=BeautifulSoup(unicodestring_containing_the_entire_htlm_doc) 
    table_tag=soup.table 
    if table_tag['class'] == ['details']: 
      print table_tag.tr.th.get_text() + " " + table_tag.tr.td.get_text() 
      a=table_tag.next_sibling 
      print unicode(a) 
      print table_tag.contents 

Questo mi ottiene il contenuto della prima riga della tabella, e anche un elenco dei contenuti. Ma la prossima cosa fratello non sta funzionando correttamente, suppongo che stia semplicemente usando male. Ovviamente potrei solo analizzare il contenuto, ma mi sembra che la bella zuppa sia stata progettata per impedirci di fare esattamente questo (se inizio a analizzare me stesso, potrei come analizzare bene l'intero documento ...). Se qualcuno potesse illuminarmi su come realizzare questo, I sarebbe grato. Se c'è un modo migliore di BeautifulSoup, sarei interessato a sentirne parlare.

risposta

13
>>> from bs4 import BeautifulSoup 
>>> soup = BeautifulSoup(unicodestring_containing_the_entire_htlm_doc) 
>>> table = soup.find('table', {'class': 'details'}) 
>>> th = table.find('th', text='Issued on:') 
>>> th 
<th>Issued on:</th> 
>>> td = th.findNext('td') 
>>> td 
<td>2013-06-13</td> 
>>> td.text 
u'2013-06-13' 
Problemi correlati