【发布时间】:2015-11-19 23:09:32
【问题描述】:
目前,我有一个如下所示的表格:
<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>
包含字符串“Check”的单元格是我要查找的单元格。我假设它正在寻找确切的字符串,所以也许我需要正则表达式来处理我确实 不 想要“检查”也算在内的事实。我什至还没有到达那里,但是如果有人有见解可以提供,我会接受!
所以,我有以下代码:
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
因此,问题在于它正在打印所有单元格(很好),但在每一行之后都打印“Yay”。我只是希望它在带有“检查”的单个单元格之后打印“耶”。我认为 if 语句会解决这个问题,但我以某种方式搞砸了这个逻辑。有什么想法吗?
【问题讨论】:
-
尝试
if 'Check' in line:,因为line.find("Check")只有在字符串以Check开头时才会为假(因为索引将为0)。.find()如果没有找到则返回 -1,结果为真 -
在我看来,如果您使用 lxml 模块而不是 beautifulsoup 并且花时间学习如何构建 XPATH 查询,它会更方便(并且更快)。我认为您在这里不需要正则表达式。
-
@RNar, "如果 'Check' in line:' 让我看不到 "yay" 打印输出,即使我可以在那里看到它。有什么想法吗?
-
如果你把
print line放在 for 循环中,你会打印每一行。这样做是为了确保您在设置tablerow时获取了实际需要的数据。我觉得你可能不是
标签: python regex beautifulsoup