因此,我试图使用BeautifulSoup来打印表格行,但我不能仅使用该行的ID,因为该行的位置可能会根据几个不同的变量而变化。所有行的名称都类似于trRow_1
。我需要做的是将包含要查找的文本的行打印出来,因为它一直在移动。
我无法弄清楚用if
语句打印出所需行的措辞。
这是我尝试过的方法,显然不起作用,但是应该让您了解我想要的东西:
table = soup1.find("table", id="tblActivities")
tablerow = table.findAll("tr")
TextIwant = tablerow.find(<span>"The Text I Want"</span>)
print(TextIWant)
关于如何执行此操作的任何想法?
这是我正在使用的行元素:
<tr id="trRow_5" class="changeTrOnhover" uniqueid="" rowid="2200005" action="0" postype="0" levelclass="2200005" riskcountry="United States" issuecurrency="" riskregion="" seq="5">
<!-- End positionDetail greater than 0 -->
<td>
<span class="bold"> Cash Equivalent
</span>
</td> <!-- Asset class desc -->
<td><span></span></td> <!-- price -->
<td><span></span></td> <!-- quantity -->
<!-- START PSI19 US77980 Populate values for Investment cost -->
<td class="bold"><span>
<span>52,896.91 USD
</span></span></td>
<!-- END PSI19 US77980 Populate values for Investment cost -->
<!-- base mkt -->
<td class="bold"><span>
52,896.91 USD
</span></td>
<!-- local mkt -->
<!-- perc of class -->
<td nowrap="">
<span class="bold">
6.88
</span>
</td>
<!-- perc of total mkt -->
<!-- income yield -->
<!-- moodys -->
<td><span></span></td> <!-- action -->
<!-- positionDetail = 0 -->
</tr>
soup.select_one('table#tblActivities').select('tr:has(td:contains("Cash Equivalent")) td')
这将返回所有表行。
for td in table.select('tr:has(td:contains("Cash Equivalent")) td'):
print(td.text.strip())
这还将返回表中的所有行。
答案 0 :(得分:1)
我不确定是什么问题。 @Andrej Kesely的解决方案对我有用。他的解决方案的简化版本也可以使用:
soup = bs([your html above],'html5')
for element in soup.select('tr:has(span:contains("Cash Equivalent"))'):
print(element.text.replace('\n','').strip())
如果您改变策略并用find()
方法替换css选择
tab = soup.find('table',id='tblActivities')
row = soup.find(lambda tag:tag.name=="span" and "Cash Equivalent" in tag.text)
for i in row:
print(i.parent.parent.parent.text.strip().replace('\n',''))
那也行。在所有这些情况下,输出为:
现金等值
52,896.91美元
52,896.91美元
6.88
我相信这就是您要寻找的。 p>
答案 1 :(得分:0)
您可以使用CSS选择器:has()
和:contains()
用td选择包含所选文本的行:
data = '''
<table id="tblActivities">
<tr>
<td>I Dont want this</td>
<td>I Dont want this</td>
<td>I Dont want this</td>
</tr>
<tr>
<td>Some data</td>
<td><span>The Text I Want</span></td>
<td>Some data</td>
</tr>
<tr>
<td>I Dont want this</td>
<td>I Dont want this</td>
<td>I Dont want this</td>
</tr>
</table>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(data, 'lxml')
table = soup.select_one('table#tblActivities')
for td in table.select('tr:has(td:contains("The Text I Want")) td'):
print(td.text)
打印:
Some data
The Text I Want
Some data
进一步阅读: