2013-06-19 19 views
6

Chcę wyodrębnić określone informacje z dokumentu HTML. Na przykład. to zawiera tabelę (między innymi stoły z innych treści) tak:Wyodrębnianie zawartości tabeli z html przy użyciu pythona i 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> 

Chcę wydobyć informacje, takie jak daty „wydania”. Wygląda na to, że BeautifulSoup4 może to zrobić łatwo, ale jakoś nie udaje mi się to naprawić. Mój kod do tej pory:

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 

To dostaje mi zawartość pierwszego wiersza tabeli, a także wykaz zawartości. Ale następny problem z rodzeństwem nie działa poprawnie, myślę, że po prostu źle go używam. Oczywiście mogłem po prostu przetworzyć zawartość, ale wydaje mi się, że piękna zupa została zaprojektowana, aby uniemożliwić nam zrobienie tego dokładnie (jeśli sam zacznę analizować, mogę jako przeanalizować cały dokument ...). Gdyby ktoś mógł mnie oświecić, jak to osiągnąć, Ibyłby wdzięczny. Jeśli jest lepszy sposób niż BeautifulSoup, byłbym zainteresowany, aby usłyszeć o tym.

Odpowiedz

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' 
Powiązane problemy