使用BeautifulSoup如何仅选择class为col-16且无其他类的div元素
BeautifulSoup 精确匹配单类名div的解决方案
你当前遇到的问题有两个核心原因:
- 初始代码的目标类名写为
col-xs-12,和你需要匹配的col-16不一致 - BeautifulSoup默认的class匹配是包含匹配,只要标签class列表中存在目标值就会被选中,不会校验是否存在其他类名
实现仅匹配只有col-16类名div的两种方法:
方法1:使用自定义过滤函数(兼容所有BeautifulSoup版本)
给find_all传入自定义判断函数,直接校验class列表是否完全等于["col-16"]:result = soup_object.find_all( lambda tag: tag.name == "div" and tag.get("class") == ["col-16"] )原理:BeautifulSoup会将多值class属性自动拆分为列表,当且仅当div的class列表只有
col-16一个元素时才会被匹配。方法2:使用CSS精确属性选择器(适用于BeautifulSoup 4.7及以上版本)
利用CSS选择器的属性精确匹配规则,直接筛选class属性字符串完全等于col-16的div:result = soup_object.select('div[class="col-16"]')该方法写法更简洁,性能和自定义函数方案基本一致。
内容的提问来源于stack exchange,提问作者Javlon
相关产品推荐
相关产品推荐

