网页爬取时触发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
相关产品推荐
相关产品推荐

