td でいくつかの href を取得するために必要な構文に苦労しています。テーブル、tr、および td 要素には、クラスまたは ID はありません。
この例でアンカーをつかみたいとしたら、何が必要ですか?
< tr > < td > < a >...
ありがとう
td でいくつかの href を取得するために必要な構文に苦労しています。テーブル、tr、および td 要素には、クラスまたは ID はありません。
この例でアンカーをつかみたいとしたら、何が必要ですか?
< tr > < td > < a >...
ありがとう
ドキュメントに従って、最初に解析ツリーを作成します。
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"]
このようなもの?
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')
。