如何判断BeautifulSoup获取的div列表中是否含class带new的span
最优解决方案:判断div列表中是否存在class含“new”的span元素
方法一:基于已获取的div列表(高效短路判断)
如果你已经拿到了目标div列表(比如通过divs = soup.find_all('div', role='news_item')),不用逐个遍历检查到底,用any()配合生成器表达式就行——它会在找到第一个符合条件的元素后立刻停止,不用遍历全部div,性能更优:
# 从已有div列表中判断 has_target_span = any(div.find('span', class_=lambda cls: cls and 'new' in cls) for div in divs)
这里的lambda函数用来判断span的class属性里是否包含“new”,any()只要有一个div满足条件就返回True,否则返回False。
方法二:直接从文档中一步查询(更简洁)
如果还没单独获取div列表,直接用BeautifulSoup的CSS选择器一步到位更高效,省去先取div列表的步骤:
# 直接从整个文档中查找匹配的元素 has_target_span = bool(soup.select_one('div[role="news_item"] span[class*="new"]'))
div[role="news_item"]定位目标divspan[class*="new"]匹配class属性包含“new”的span元素select_one()找到第一个匹配元素就返回,bool()把结果转成True/False
为什么比手动遍历好?
手动遍历需要逐个检查每个div,哪怕找到第一个符合条件的元素也得继续跑完全部;而上面两种方法都是短路判断,找到目标就立刻停止,性能更优,代码也更简洁易读。
内容的提问来源于stack exchange,提问作者STORM
相关产品推荐
相关产品推荐

