0

以下の HTML (file.txt) の TH タグを一致させようとしています。

<TABLE WIDTH="71%" BORDER=0 CELLSPACING=0 CELLPADDING=0>
<TR VALIGN="BOTTOM">
<TH WIDTH="34%" ALIGN="LEFT"><FONT SIZE=1><B>Name<BR> </B></FONT><HR NOSHADE></TH>
<TH WIDTH="3%"><FONT SIZE=1>&nbsp;</FONT></TH>
<TH WIDTH="5%" ALIGN="CENTER"><FONT SIZE=1><B>Age</B></FONT><HR NOSHADE></TH>
<TH WIDTH="3%"><FONT SIZE=1>&nbsp;</FONT></TH>
<TH WIDTH="55%" ALIGN="CENTER"><FONT SIZE=1><B>Positions</B></FONT><HR NOSHADE></TH>
</TR>
<TR BGCOLOR="#CCEEFF" VALIGN="TOP">
<TD WIDTH="34%"><FONT SIZE=2>Stephen A. Wynn</FONT></TD>
<TD WIDTH="3%"><FONT SIZE=2>&nbsp;</FONT></TD>
<TD WIDTH="5%" ALIGN="CENTER"><FONT SIZE=2>60</FONT></TD>
<TD WIDTH="3%"><FONT SIZE=2>&nbsp;</FONT></TD>
<TD WIDTH="55%"><FONT SIZE=2>Chairman of the Board and Chief Executive Officer</FONT></TD>
</TR>
<TR BGCOLOR="White" VALIGN="TOP">
<TD WIDTH="34%"><FONT SIZE=2>Kazuo Okada</FONT></TD>
<TD WIDTH="3%"><FONT SIZE=2>&nbsp;</FONT></TD>
<TD WIDTH="5%" ALIGN="CENTER"><FONT SIZE=2>60</FONT></TD>
<TD WIDTH="3%"><FONT SIZE=2>&nbsp;</FONT></TD>
<TD WIDTH="55%"><FONT SIZE=2>Vice Chairman of the Board</FONT></TD>
</TR>
</TABLE>

私は次のことを試しましたが、うまくいかないようです:

from bs4 import BeautifulSoup

infile = open("file.txt")
soup = BeautifulSoup(infile.read())
#this works
soup.findAll('th')
#this works but isn't particularly useful...
soup.findAll(text="Age")
#this is what I really want, but it returns an empty list
soup.findAll('th', text="Age")

助けてくれてありがとう!

4

2 に答える 2

3

私が知る限り、「Age」というテキストを持つ th オブジェクトを取得したいと考えています。その猫の皮を剥ぐ方法はたくさんありますが、基本的にはすべての th を見つけることから始めます。そこから、それらすべてを繰り返し処理して、年齢を含むものを見つけることができます。したがって、以下のコードが役立つはずです。

out = []
foo = soup.findAll("th")
for bar in foo:
    if bar.find(text"Age"):
        out.append(bar)
于 2012-07-21T00:36:17.247 に答える
1

追加<HR>要素が BeautifulSoup の文字列処理に干渉しています。

BeautifulSoup のドキュメントから: 「テキストは文字列を検索するためのものですが、タグを検索するための引数と組み合わせることができます。Beautiful Soup は、.string がテキストの値と一致するすべてのタグを検索します。」

soup.findAll('th')[2].stringそれがnilであるのに対し、soup.findAll('th')[2].font.stringはであることがわかりますu"Age"

マークアップを変更せずに必要なヘッダーを見つけるには、TimD が提案するようなことをする必要があります。

out = []
headers = soup.findAll("th")
for header in headers:
    if header.find(text="Age"):
        out.append(header)
于 2012-07-21T01:03:42.983 に答える