如何用BeautifulSoup查找并按顺序打印Open/Closed精确匹配文本
如何用BeautifulSoup同时抓取精确匹配的"Open"和"Closed"文本?
嘿,我来帮你调整这段代码!你当前的lambda表达式只筛选了包含"Open"的文本,要同时精确匹配"Open"和"Closed"的话,只需要修改判断逻辑就行啦。
首先,咱们要明确是精确匹配——也就是只抓取完全等于"Open"或"Closed"的文本(如果文本前后可能有空格、换行符,记得先做去除空白的处理,避免漏匹配)。修改后的代码如下:
# 基于你已有的soup对象 for node in soup.find_all(text=lambda x: x and x.strip() in {"Open", "Closed"}): print(node.strip()) # 打印时也去除空白,输出更整洁
小细节解释:
- 用
x.strip()是为了处理文本前后可能存在的空格、制表符或换行符,比如" Closed "这种情况也能被正确识别 - 用集合
{"Open", "Closed"}来做判断,比写x.strip() == "Open" or x.strip() == "Closed"更简洁高效,后续要加其他关键词也更方便 - 开头的
x and ...是为了过滤掉空文本节点,避免报错
如果你确定目标文本绝对没有多余空白,也可以简化成这样:
for node in soup.find_all(text=lambda x: x in ("Open", "Closed")): print(node)
这样就能按发现顺序把所有精确匹配的"Open"和"Closed"打印到控制台啦~
内容的提问来源于stack exchange,提问作者Nik Ackermann
相关产品推荐
相关产品推荐

