11

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

これにより、テーブルの最初の行の内容と、内容のリストが取得されます。しかし、次の兄弟が正しく機能していません。使い方が間違っているだけだと思います。もちろん、内容を解析することもできますが、美しいスープは、まさにこれを行うことを妨げるように設計されているようです (自分で解析を開始する場合は、ドキュメント全体を解析することもできます...)。誰かがこれを達成する方法を教えてくれたら、感謝します。BeautifulSoupよりも良い方法があれば、それについて聞きたいです。

4

1 に答える 1