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

网页爬取时触发TypeError: unhashable type: 'slice'错误求助

解决爬取时的 TypeError: unhashable type: 'slice' 问题

嘿,我之前也碰到过类似的坑,给你掰扯清楚怎么回事:

你代码里的name = result.contents[0][0:-1]触发了错误,核心原因是**result.contents[0]并不是你以为的字符串/列表这类支持切片的对象**。BeautifulSoup的contents返回的是当前节点的所有子节点列表,里面的元素可能是Tag对象、NavigableString文本节点,甚至是注释节点——如果是Tag对象的话,直接用[0:-1]切片就会抛出「不可哈希类型:slice」的错误,因为Tag本身不支持这种操作。

给你几个针对性的解决办法:

  • 如果目标是提取文本节点的内容并切片:
    先把result.contents[0]转换成字符串,再执行切片:

    name = str(result.contents[0])[0:-1]
    
  • 如果result.contents[0]是一个标签节点,要先取它的文本:
    用.text或者.get_text()提取标签内的文本,再做切片操作:

    # 基础提取文本
    name = result.contents[0].text[0:-1]
    # 如果你需要去掉文本前后的空白,用get_text(strip=True)
    name = result.contents[0].get_text(strip=True)[0:-1]
    
  • 更稳妥的文本提取方式:
    有时候用contents容易拿到非文本节点,不如直接用.stripped_strings获取所有非空白文本,取第一个再处理:

    # 获取第一个非空白文本节点,处理空值避免索引错误
    first_text = next(result.stripped_strings, '')
    name = first_text[0:-1] if len(first_text) > 0 else ''
    

另外建议你调试的时候加一行print(type(result.contents[0]), result.contents[0]),看看这个节点到底是什么类型,这样能更快定位问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:15