如何用Python BeautifulSoup判断表格行是否存在第二列td?
动态筛选ACMA表格行的解决方案
要替代不稳定的文本过滤,直接通过BeautifulSoup判断表格行的结构特征就能解决问题——那些随机出现的绿色表头行要么<td>元素数量不足,要么根本没有第二个<td>,我们可以基于这一点做精准筛选:
方案1:检查是否存在第二个<td>元素
直接用CSS选择器定位第二列,判断其是否存在,以此过滤无效行:
# 筛选出包含至少2个<td>的有效行 valid_rows = [row for row in soup.select('table tr') if row.select_one('td:nth-of-type(2)') is not None]
方案2:检查<td>元素的数量
如果绿色表头行的<td>数量远少于正常数据行,也可以通过长度判断:
# 只保留<td>数量≥2的行(可根据实际数据列数调整数值) valid_rows = [row for row in soup.select('table tr') if len(row.select('td')) >= 2]
结合现有代码修改
把你原来遍历所有表格行的逻辑,替换成遍历筛选后的valid_rows即可。比如原来的行处理代码:
for row in soup.select('table tr'): cols = row.find_all('td') # 后续数据提取逻辑
改成:
valid_rows = [row for row in soup.select('table tr') if row.select_one('td:nth-of-type(2)')] for row in valid_rows: cols = row.select('td') # 正常提取数据即可,无需再做文本过滤
这种基于结构的筛选完全不依赖文本内容,不管绿色表头行的文字怎么变,只要结构不符合数据行的特征就会被过滤,稳定性比文本过滤高得多。
内容的提问来源于stack exchange,提问作者Haris
相关产品推荐
相关产品推荐

