如何用Selenium和BeautifulSoup精准提取HTML中的成绩数据
解决方案:精准提取成绩数据
你当前代码用soup.find_all()遍历所有标签打印文本,肯定会输出整个页面内容。要精准拿到目标成绩(比如69.00%),可以根据目标HTML的结构特征定位元素:
方法1:通过父容器定位提取
目标成绩在class="col-md-2"的div容器里,每个成绩块嵌套在class="text-align-center"的子div中。先定位父容器,再逐个提取成绩:
# 替换原代码中从for tag in soup.find_all():开始的部分 grade_container = soup.find('div', class_='col-md-2') if grade_container: # 获取所有成绩区块 grade_blocks = grade_container.find_all('div', class_='text-align-center') for block in grade_blocks: # 直接提取完整成绩文本(自动拼接数字和%) full_score = block.find('h1').get_text(strip=True) # 提取对应的统计周期 period = block.find('h6').get_text(strip=True) print(f"{period}: {full_score}")
方法2:直接用CSS选择器批量提取
如果页面里只有这两个成绩模块,也可以用CSS选择器一次性定位所有目标元素:
# 替换原代码中从for tag in soup.find_all():开始的部分 # 匹配所有成绩文本和对应的周期 score_elements = soup.select('div.col-md-2 div.text-align-center h1') period_elements = soup.select('div.col-md-2 div.text-align-center h6') # 一一对应输出 for score, period in zip(score_elements, period_elements): print(f"{period.get_text(strip=True)}: {score.get_text(strip=True)}")
注意事项
- BeautifulSoup里用
class_指定类名,避免和Python关键字class冲突 get_text(strip=True)会自动去除文本前后的空格和换行,直接拿到整洁的成绩内容- 尽量用更具体的选择器组合,避免定位到页面其他无关元素
内容的提问来源于stack exchange,提问作者Jack Underwood
相关产品推荐
相关产品推荐

