如何使用BeautifulSoup从嵌套span的指定class div中提取纯文本
问题解决方案
你调用.text报错的核心原因是soup.find_all()返回的是匹配元素的列表(ResultSet对象),不能直接对整个列表调用.text属性,需要遍历每个匹配到的div元素后再操作文本提取。
正确实现代码
from bs4 import BeautifulSoup import requests import lxml # 修正requests.get参数,第二个参数不需要传读取模式'r' cbs_scores = requests.get('https://www.cbssports.com/college-football/scoreboard/').text soup = BeautifulSoup(cbs_scores, 'lxml') time_left_divs = soup.find_all('div', class_ = 'game-status emphasis') for div in time_left_divs: # 提取完整纯文本,自动合并嵌套span标签内的内容 full_text = div.get_text(strip=True) print(f"完整状态文本:{full_text}") # 拆分提取节次和剩余时间 if 'Quarter' in full_text: quarter_info, time_info = full_text.split('Quarter', 1) quarter = f"{quarter_info.strip()} Quarter" remain_time = time_info.strip() print(f"节次:{quarter},剩余时间:{remain_time}")
方法说明
.get_text()是BeautifulSoup提取元素文本的标准方法,会自动递归提取内部所有子标签的文本并拼接,兼容性比.text更好,可通过参数自定义拼接规则和空白处理逻辑。- 如果需要避免依赖文本关键词拆分,也可以直接遍历div的子节点实现精准提取:
for div in time_left_divs: content_parts = [] for node in div.contents: # 分别处理文本节点和标签节点 if isinstance(node, str): content_parts.append(node.strip()) else: content_parts.append(node.get_text(strip=True)) full_text = ''.join(content_parts)
内容的提问来源于stack exchange,提问作者RookiePython
相关产品推荐
相关产品推荐

