25

td でいくつかの href を取得するために必要な構文に苦労しています。テーブル、tr、および td 要素には、クラスまたは ID はありません。

この例でアンカーをつかみたいとしたら、何が必要ですか?

< tr > < td > < a >...

ありがとう

4

2 に答える 2

33

ドキュメントに従って、最初に解析ツリーを作成します。

import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)

次に、たとえば<a>直接の親が であるタグを検索し<td>ます。

for ana in soup.findAll('a'):
  if ana.parent.name == 'td':
    print ana["href"]
于 2009-06-29T14:37:27.167 に答える
30

このようなもの?

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]

それはあなたが提供するhtmlの各「td」内の最初の「a」を見つけるはずです。td.findより具体的に調整するfindAllか、各 td 内に複数のリンクがある場合に使用することができます。

更新:ダニエルのコメントについて、リストに 's がないことを確認したい場合はNone、次のようにリスト内包表記を変更できます。

from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]

これは基本的に、によって返される実際の要素があるかどうかを確認するためのチェックを追加するだけですtd.find('a')

于 2009-06-29T14:37:15.360 に答える