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

如何避免类型不匹配?网页文本解析遇TypeError问题求助

解决urllib3获取内容后nltk分词的类型不匹配错误及404问题
  • 修复404错误
    你使用的URL http://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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:10:38