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 对象。有很多方法可以剥那只猫的皮,基本上都是从找到所有的开始。从那里您可以遍历所有这些以找到包含年龄的那个。所以下面的代码应该很有用。

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].stringis nil, while soup.findAll('th')[2].font.stringis 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 回答