1

BS4 を使い始めようとしていますが、これらのテーブルの 1 つで問題が発生したようです。だから、私は次のようなものを持っています:

<td align="center" valign="top">
foo
</td>
<td align="center">
foo bar
</td>
<td align="center" class="new" valign="top">bar</td>
<td align="center" class="newq" valign="top">foo</td>

上記からだけを抽出したいと思い<td align="center">ます。だから、私は次のようなものを持っています:

td_al_center = soup.find_all('td',{'align':'center'})

しかし、これにより、上記の4つの組み合わせすべてが得られます。<td align="center">( のあるもの)のみを抽出するように指定するにはどうすればよいfoo barですか? 誰かが私を正しい軌道に乗せることができれば、非常に感謝しています..

4

2 に答える 2

1

要素 a) が持つ必要があり、b) は他の属性を持つことができないという基準であると仮定するとalign="center"、フィルターとして関数を使用する必要があるように見えます。

def centered_only(tag):
    return len(tag.attrs) == 1 and tag.attrs.get('align') == 'center'

td_al_center = soup.td(centered_only)

フィルターとしての機能の詳細については、http://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-functionを参照してください。

find_allこれまで見てきたように、特定の属性の値をフィルター処理するのは簡単ですが、機能フィルター以外のすべての属性を強制的に除外できるタグ名の短縮形は見当たりません。

于 2013-10-25T19:52:25.240 に答える