2

次の html コードがあり、美しいスープを使用して情報を抽出します。たとえば、関係のステータスを取得したい:関係

<table class="box-content-list" cellspacing="0">
            <tbody>
             <tr class="first">
              <td>
                   <strong>
                    Relationship status:
                   </strong>
               Relationship
              </td>
             </tr>
             <tr class="alt">
              <td>
               <strong>
                Living:
              </strong>
               With partner
              </td>
             </tr>

次のコードを作成しました。

xs = [x for x in soup.findAll('table', attrs = {'class':'box-content-list'})]       
    for x in xs:
        #print x
        sx = [s for s in x.findAll('tr',attrs={'class':'first'})]
        for s in sx:
            td_tabs = [td for td in s.findAll('td')]
            for td in td_tabs:
                title = td.findNext('strong')
                #print str(td)
                status = td.findNextSibling()
                print title.string
                print status

しかし、私が得る結果は関係ステータスです:そして印刷ステータスは印刷なしです。私は何を間違っていますか?

4

2 に答える 2

1

まず第一に、すべてのリスト内包表記は必要ありません。あなたは結果をコピーするだけで何もしません。それらがなくても安全に行うことができます。

列に次の兄弟がない(タグが1 つ しかない) ため、 が返されます。代わりに、タイトル(タグ)から属性を取得する必要がありました。<td>None.next<strong>

for table in soup.findAll('table', attrs = {'class':'box-content-list'}):
    for row in table.findAll('tr',attrs={'class':'first'}):
        for col in row.findAll('td'):
            title = col.strong
            status = title.nextSibling
            print title.text.strip(), status.strip()

これは次を印刷します:

Relationship status: Relationship

あなたの例のために。

于 2013-04-12T10:14:22.337 に答える