1. ホーム
  2. python

[解決済み] 特定の属性だけを持つタグを見つける方法 - BeautifulSoup

2022-12-04 23:27:51

質問

BeautifulSoupを使用して、検索した属性のみを含むタグを検索するにはどうしたらよいでしょうか。

例えば、私はすべての <td valign="top"> タグを見つけたい。

次のようなコードです。 raw_card_data = soup.fetch('td', {'valign':re.compile('top')})

は欲しいデータをすべて取得しますが、同時にすべての <td> タグも取得します。 valign:top

も試してみました。 raw_card_data = soup.findAll(re.compile('<td valign="top">')) を試してみましたが、これは何も返しません(おそらく不正な正規表現が原因です)。

私はBeautifulSoupで"Findと言う方法があるかどうか疑問に思っていました。 <td> タグで、その唯一の属性が valign:top "です。

アップデイト 例えば、あるHTML文書に次のような記述があったとします。 <td> タグが含まれていたとします。

<td valign="top">.....</td><br />
<td width="580" valign="top">.......</td><br />
<td>.....</td><br />

私は、最初の <td> タグ ( <td width="580" valign="top"> ) を使って

どのように解決するのですか?

で説明したように BeautifulSoupのドキュメント

これを使うことができます。

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

EDIT :

valign="top" 属性のみを持つタグを返すには、タグの長さをチェックするために attrs プロパティを指定します。

from BeautifulSoup import BeautifulSoup

html = '<td valign="top">.....</td>\
        <td width="580" valign="top">.......</td>\
        <td>.....</td>'

soup = BeautifulSoup(html)
results = soup.findAll("td", {"valign" : "top"})

for result in results :
    if len(result.attrs) == 1 :
        print result

これは、:

<td valign="top">.....</td>