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
相关产品推荐
相关产品推荐

