如何用BeautifulSoup筛选无class属性的<tr>标签爬取Fbref球员数据
解决Fbref英超球员数据爬取中筛选无class属性标签的问题
以下两种方法可以精准筛选出无class属性的标签,避开带class="thead"的表头行:
方法一:使用CSS选择器直接过滤
利用:not([class])伪类选择器,直接排除所有带有class属性的元素,代码示例:from bs4 import BeautifulSoup # 假设已完成页面解析得到soup对象 target_rows = soup.select('tr:not([class])')这个选择器会自动跳过所有带class的表头行,只保留目标数据行。
方法二:遍历判断class属性
遍历所有标签,手动检查是否不存在class属性(或class为空),代码示例:target_rows = [] for tr in soup.find_all('tr'): # get('class')返回None表示无class属性,返回空列表表示class为空 if not tr.get('class'): target_rows.append(tr)
补充说明
之前用class_=None无效,大概率是因为部分标签可能存在隐藏的空class属性(比如<tr class="">),而上述两种方法能覆盖这种情况。筛选完成后,循环遍历target_rows时,就能正常获取到带标签的数据行,不会再出现'NoneType' object has no attribute 'a'的报错。
内容的提问来源于stack exchange,提问作者Kamal Moha
相关产品推荐
相关产品推荐

