Beautiful Soup在for循环中仅运行一次就失效的问题如何解决
问题根因
你的代码在第一次循环时直接覆盖了原始的完整HTML页面对应的soup对象,后续循环都是在第一次提取出的单条成绩HTML片段中查找其他id,自然匹配不到结果。
修正后代码
from bs4 import BeautifulSoup classid = ["ccid_10132191", "ccid_10132192", 'ccid_9829339', 'ccid_9829337'] with open('output.html') as fp: # 全局完整soup仅初始化一次,不要在循环内覆盖 soup = BeautifulSoup(fp, 'html.parser') for classes in classid: # HTML中id属性唯一,直接用find在完整文档中定位目标行,不需要find_all target_tr = soup.find(id=classes) if not target_tr: print(f"未找到id为{classes}的成绩项") continue # 直接在定位到的tr节点下查找目标元素,不需要转字符串重新生成soup print(target_tr.find(class_='bold').contents)
修正说明
- 保留完整HTML的soup对象不被修改,保证每次查找的范围都是整个文档
- 省略了把匹配结果转字符串再重新解析为soup的冗余步骤,直接在定位到的元素下做二次查找,运行效率更高
- 增加空值判断,避免遇到不存在的id时代码直接崩溃
内容的提问来源于stack exchange,提问作者samleews
相关产品推荐
相关产品推荐

