如何用BeautifulSoup提取以m结尾的首个加粗(strong)文本?
解决方法:用BeautifulSoup提取以"m"结尾的首个加粗文本
当然可以搞定这个问题!之前的方法因为页面结构变化失效太正常了,我们只需要调整筛选逻辑,精准定位到以"m"结尾的加粗文本就行,给你两种实用的实现方式:
方法一:遍历筛选所有<strong>标签
这种方式逻辑清晰,适合新手理解,逐个检查每个加粗文本,找到第一个符合条件的就停止:
from bs4 import BeautifulSoup # 假设你的HTML内容已经存在html变量中(比如通过requests获取的页面源码) soup = BeautifulSoup(html, 'html.parser') water_level = None # 遍历所有strong标签 for strong in soup.find_all('strong'): # 提取标签文本并去除前后空白 text = strong.get_text(strip=True) # 判断文本是否以"m"结尾 if text.endswith('m'): water_level = text break # 找到第一个就停止遍历,提升效率 if water_level: print(f"成功提取水位:{water_level}") else: print("未找到符合条件的水位信息")
方法二:用find()结合自定义判断(更简洁)
BeautifulSoup的find()方法支持传入自定义判断函数,一行逻辑就能定位目标标签:
from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') # 找到第一个文本以"m"结尾的strong标签 target_tag = soup.find('strong', lambda tag: tag.get_text(strip=True).endswith('m')) if target_tag: water_level = target_tag.get_text(strip=True) print(f"成功提取水位:{water_level}") else: print("未找到符合条件的水位信息")
额外优化建议
如果页面里有其他以"m"结尾的非水位文本(比如某些无关的单位标注),可以进一步强化判断条件,比如要求文本包含数字(水位一般是数值+米,例如15.7m):
# 修改判断逻辑,同时满足以m结尾且包含数字 if text.endswith('m') and any(char.isdigit() for char in text):
这样就能更精准地定位到水位信息啦!
内容的提问来源于stack exchange,提问作者daneee
相关产品推荐
相关产品推荐

