下面是html代码片段1:
<td class="firstleft lineupopt-name" style=""><a href="/link/link_url?id=222" title="Donald Trump" target="_blank">Trump, Donald</a> <span style="color:#666;font-size:10px;">B</span> <span style="color:#cc1100;font-size:10px;font-weight:bold;">TTT</span></td>
下面是html代码片段2:
<td class="firstleft lineupopt-name" style=""><a href="/link/link_url2?id=221" title="Hillary Clinton" target="_blank">Clinton, Hillary</a> <span style="color:#cc1100;font-size:10px;font-weight:bold;">TTT</span></td>
以下是我的相关代码:
all = cols[1].find_all('span')
for ele in all:
if (ele is not None):
ttt = cols[1].span.text
else:
ttt = 'none'
问题:我的代码在这两个示例中都能工作,但是对于html代码片段2,它从第一个span标签中获取内容。在这两个示例中,如果标签存在,我想只从最后一个span标签中获取内容。如何做到这一点?
4条答案
按热度按时间mitkmikd1#
BS4现在支持
last-child
,因此可能的方法如下:要获取文本,只需在结果集上迭代。
示例
输出
e1xvtsh32#
一种直接的方法是通过
-1
索引获取最后一个元素:我也尝试过使用CSS选择器来处理它,但是
BeautifulSoup
不支持last-child
、last-of-type
或nth-last-of-type
,并且只支持nth-of-type
伪类。mw3dktmi3#
我用bs4 v4.9.1在conda env中测试了它,现在
nth-last-of-type(1)
还可以。vwkv1x7d4#
如果您试图从已经选择的元素中只选择直接子元素,请使用
:scope
标签在选择器中引用它本身,这样您现在就可以使用>
、~
和+
运算符。