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

BeautifulSoup获取data-log-body属性报错:'dict' object is not callable解决咨询

解决BeautifulSoup提取data-log-body属性的TypeError问题

错误原因

attrs是BeautifulSoup元素的属性字典,属于不可调用的字典对象,用括号()调用会触发TypeError: 'dict' object is not callable。你需要用字典的访问语法来获取属性值。

正确实现方式

方法1:方括号直接访问(属性确定存在时用)

from bs4 import BeautifulSoup

# 替换为你的HTML内容
html = """
<div class="side_sm">
    <a href="#" data-log-body="your_target_value">链接</a>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
# 定位目标div
side_sm_div = soup.find('div', class_='side_sm')

if side_sm_div:
    # 找到div下的a标签
    a_tag = side_sm_div.find('a')
    if a_tag:
        # 用方括号访问字典属性
        data_log_body = a_tag.attrs['data-log-body']
        print(data_log_body)  # 输出 your_target_value

方法2:get方法(属性可能不存在时更安全)

如果不确定data-log-body属性是否存在,用字典的get()方法可以避免抛出KeyError,还能指定默认值:

from bs4 import BeautifulSoup

html = """
<div class="side_sm">
    <a href="#">链接</a>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
side_sm_div = soup.find('div', class_='side_sm')

if side_sm_div:
    a_tag = side_sm_div.find('a')
    if a_tag:
        # get方法:第一个参数是属性名,第二个是默认值(可选)
        data_log_body = a_tag.attrs.get('data-log-body', '属性不存在')
        print(data_log_body)  # 输出 属性不存在

更简洁的写法

BeautifulSoup元素本身支持get()方法,无需显式调用attrs:

data_log_body = a_tag.get('data-log-body', '属性不存在')

关键修正点

把错误的.attrs('data-log-body')替换为以下任意一种即可:

  • .attrs['data-log-body']
  • .attrs.get('data-log-body')
  • .get('data-log-body')

内容的提问来源于stack exchange,提问作者hanbit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:35:26