目前,我有一个如下表:
<tr class="tdc"><td class="myip_tdc"><a href="javascript:showIt('w115');">Account</a><br/><small>client</small></td>
<td class="tdc">Nov, 19 2015 05:18 pm </td>
<td class="tdc"><small><span style="color:green"> Check </span></small></td>
<tr class="tr"><td class="tde" colspan="6">
<div class="divl" id="wtt1266" style="display: block"><table><tr><td style="padding: 5px"><table><tr><td colspan="3"></td></tr><tr><td>
</td><td>
包含字符串的单元格&#34; Check&#34;是我想要寻找的人。我假设它正在寻找确切的字符串,所以也许我需要正则表达式来处理我不想要&#34;检查&#34;也算。我还没有到达那里,但如果有人有洞察力提供,我会接受它!
所以,我有以下代码:
soup = BeautifulSoup(nextpage, "lxml") #page is now converted to a BeautifulSoup object
table = soup.find("table", {'class':'tbled'}) #here is our table
tablerow = soup.find("tr", {'class':"tr"}) #here is a single row of that table
tablecell = soup.find("td", {'class':'tdc'})
for line in tablerow:
if line.find("Check"):
print "Yay"
print line
所以,问题在于它打印所有细胞(好),但打印&#34; Yay&#34;在每一行之后。我只想要它打印&#34; Yay&#34;单细胞后用&#34;检查&#34;在里面。我认为if语句可以解决这个问题,但我以某种方式搞砸了那个逻辑。有什么想法吗?
答案 0 :(得分:0)
有多种方法可以解决这个问题。
一个想法是将function as a text
argument value传递给find()
方法。该函数将剥离元素的文本并将其与Check
进行比较。然后,一旦找到元素,我们就可以在树中找到find the parent td
元素:
elm = soup.find(text=lambda x: x and x.strip() == "Check")
td = elm.find_parent("td", class_="tdc")
为了扩展@ Nefarii的答案,以下是如何应用有界字的正则表达式:
elm = soup.find(text=re.compile(r"\b[Cc]heck\b"))
td = elm.find_parent("td", class_="tdc")
答案 1 :(得分:0)
如果你想改用正则表达式路线,那就是正则表达式
for line in tablerow:
match = re.search("\bCheck\b", line)
if match:
print "Yay"
这将匹配Check但不匹配
或者如果您不希望它是特定于案例的
for line in tablerow:
match = re.search("\b.heck\b", line)
if match:
print "Yay"
也会有用