You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

爬取表格数据时遇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

快速排查和解决步骤

  1. 先确认变量的真实状态
    在调用table.find_all()之前,加一行打印代码:

    print(type(table), table)
    

    这会直接告诉你table到底是整数还是Tag对象,以及它的具体值,帮你瞬间定位问题源头。

  2. 检查变量赋值逻辑
    顺着代码往前找,看看table变量在哪些地方被修改过。重点排查有没有重名变量,或者把统计数量、索引值这类整数赋值给它的情况。

  3. 确保正确获取表格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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:01:35