2

次のhtmlでclass="s"またはclass="sb"のtdを探したい

<tr bgcolor="#e5e5f3"><td class="sb" width="200" align="left">test1</td><td class="sb" align="right">5,774.0</td><td class="sb" align="right">4,481.0</td><td class="sb" align="right">5,444.0</td><td class="sb" align="right">6,615.0</td><td class="sb" align="right">6,858.0</td></tr>
<tr bgcolor="#f0f0E7"><td class="s" width="200" align="left">test2</td><td class="s" align="right">5,774.0</td><td class="s" align="right">4,481.0</td><td class="s" align="right">5,444.0</td><td class="s" align="right">6,615.0</td><td class="s" align="right">6,858.0</td></tr>

現在、次のコードを使用しています。ただし、等級「S」しか取得できません。1 つの Beautiful Soup find_all クエリで "s" と "sb" の両方を取得することは可能ですか?

 soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml");
 for item in soup.find_all("td", { "class" : "s" }):
4

1 に答える 1

9

これは、美しいスープの正規表現のサポートを使用して行うことができます。

import re
soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml");
for item in soup.find_all("td", { "class" : re.compile(r"^(s|sb)$") })

この正規表現は以下に一致します。

  • ^- 文字列の開始

  • (s|sb)- 文字列's'または文字列のいずれか'sb'

  • $- 文字列の終わり

于 2012-11-26T20:39:38.167 に答える