如何移除表格行中显示的带thead类的重复表头?
解决Pro-Football-Reference表格重复表头问题
我经常爬这个网站的数据,太懂你说的这个重复表头问题了!那些滚动时固定在顶部的重复表头确实会干扰数据提取,给你个简单直接的解决办法:
问题分析
你之前的代码只是跳过了第一行表头,但页面里每一段数据上方都会插入一个带thead类的重复表头行——这些就是你要移除的目标。我们需要在提取表格行时,直接过滤掉所有带有这个类的行。
修改后的代码
for yr in years: try: url = f'https://www.pro-football-reference.com/years/{yr}/passing.htm' html = urlopen(url) soup = BeautifulSoup(html, "lxml") column_headers = [th.getText() for th in soup.findAll('tr', limit=2)[0].findAll('th')] # 关键修改:过滤掉所有带thead类的重复表头行,再跳过第一行原始表头 table_rows = soup.select("#passing tr:not(.thead)")[1:] # 后续处理数据行的逻辑... except Exception as e: print(f"处理年份{yr}时出错:{e}")
代码说明
- 用CSS选择器
#passing tr:not(.thead)精准筛选出所有不属于.thead类的表格行,直接排除掉重复表头; - 再通过
[1:]跳过最顶部的原始表头行,剩下的table_rows就全是纯数据行,不会有重复表头干扰了。
如果你习惯用find_all方法,也可以这样写:
table_rows = [row for row in soup.find_all('tr', parent='#passing') if 'thead' not in row.get('class', [])][1:]
内容的提问来源于stack exchange,提问作者CBW
相关产品推荐
相关产品推荐

