2013-06-19 24 views
6

html文書から特定の情報を抽出したい。例えば。私は「発行日:」日などの情報を抽出したいPythonとBeautifulSoupを使ってHTMLからテーブルの内容を抽出する

<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> 

:それはこのような(他のコンテンツと他のテーブル間の)テーブル が含まれています。それはBeautifulSoup4 のように簡単に行うことができますが、どういうわけか私はそれを正しく得ることはできません。 私のコードは、これまで:

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 

これが私の最初のテーブル行の内容、また、内容の一覧を取得します。 しかし、次の兄弟のことは正しく動作していない、私はちょうどそれを間違って使用していると思います。 もちろん内容をパーズできるだけですが、美しいスープ は、私たちが正確にこれをやってしまうのを防ぐために設計されています(自分でパースを開始すると、 は全体の文書をよく解析します...)。もし誰かがこれを成し遂げる方法について私に啓発できるならば、私は がgratefullになります。 BeautifulSoupより良い方法があれば、私は について聞いてみたいと思います。

答えて

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' 
関連する問題