爬取表格数据时遇AttributeError:int对象无find_all属性(table非空)
解决爬取表格时的AttributeError: 'int' object has no attribute 'find_all'
嘿,我之前爬网页表格时也踩过一模一样的坑!虽然你说table变量不为空,但问题的核心是这个变量的类型是整数(int),而不是BeautifulSoup的Tag对象——只有Tag对象才自带find_all()方法,整数当然没有这个属性啦。
为什么会出现这种情况?
大概率是你在代码里不小心给table变量赋了整数值,常见场景包括:
- 先写了
table = len(soup.find_all('table'))统计表格数量,之后又用同一个变量名去调用find_all() - 在某个步骤中把索引、计数这类整数赋值给了
table,覆盖了原本的Tag对象 - 甚至可能是获取表格的语句写错了,误把返回整数的操作结果存进了
table
快速排查和解决步骤
先确认变量的真实状态
在调用table.find_all()之前,加一行打印代码:print(type(table), table)这会直接告诉你
table到底是整数还是Tag对象,以及它的具体值,帮你瞬间定位问题源头。检查变量赋值逻辑
顺着代码往前找,看看table变量在哪些地方被修改过。重点排查有没有重名变量,或者把统计数量、索引值这类整数赋值给它的情况。确保正确获取表格Tag
重新确认你获取表格的代码是否正确,正确的写法应该返回Tag对象:from bs4 import BeautifulSoup # 假设已获取网页内容并存到html变量中 soup = BeautifulSoup(html, 'html.parser') # 获取第一个表格Tag table = soup.find('table') # 或者从所有表格中取指定的一个 # tables = soup.find_all('table') # table = tables[0] if tables else None # 先判断table存在再操作,避免None的情况 if table: rows = table.find_all('tr') # 接下来处理行数据 else: print("网页里没找到目标表格")
我之前犯过的错误示例
# 先统计表格数量,把整数存进了table table = len(soup.find_all('table')) print(f"找到{table}个表格") # 后面忘了这个变量已经是整数,直接调用find_all rows = table.find_all('tr') # 这里直接触发报错!
只要把统计数量的变量名改成table_count这类不重复的名字,就能避免这个问题啦。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

