如何避免类型不匹配?网页文本解析遇TypeError问题求助
解决urllib3获取内容后nltk分词的类型不匹配错误及404问题
修复404错误
你使用的URLhttp://www.gutenberg.org/files/2554/2554.txt返回404,说明目标资源不存在。古登堡项目中编号2554的作品(《罪与罚》)的有效文本URL为https://www.gutenberg.org/files/2554/2554-0.txt,替换后可正常获取内容。解决类型不匹配错误
urllib3返回的r.data是字节(bytes)类型,而nltk.word_tokenize()仅支持字符串输入,需先将字节解码为字符串:import nltk import urllib3 http = urllib3.PoolManager() # 使用修正后的有效URL r = http.request('GET', 'https://www.gutenberg.org/files/2554/2554-0.txt') # 先确认请求成功(状态码200) if r.status == 200: # 将字节按UTF-8编码解码为字符串(古登堡文本多采用UTF-8) text_content = r.data.decode('utf-8') # 执行分词操作 tokens = nltk.word_tokenize(text_content) # 示例:输出前10个分词结果 print(tokens[:10]) else: print(f"请求失败,状态码: {r.status}")避免此类问题的通用方案
- 网络请求后优先检查响应状态码,仅在状态码为200(请求成功)时再处理内容,避免对失败响应做无效操作。
- 明确区分字节与字符串类型:网络请求返回的原始数据都是字节,必须根据内容编码解码为字符串后,才能交给需要字符串输入的文本处理工具(如nltk、正则表达式模块等)。
- 若不确定编码格式,可尝试自动检测:
import chardet # 检测内容编码 detected_encoding = chardet.detect(r.data)['encoding'] text_content = r.data.decode(detected_encoding)
内容的提问来源于stack exchange,提问作者Sandip Dipa Ray
相关产品推荐
相关产品推荐

