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

Scrapy使用SitemapSpider抓取robots.txt时返回乱码问题求助

Scrapy SitemapSpider抓取robots.txt返回乱码解决方案

核心原因定位与修复方案

  • 编码识别错误
    该站点robots.txt未使用通用UTF-8编码,且响应头Content-Type未声明编码格式,Scrapy默认按UTF-8解码会出现乱码,浏览器会自动尝试多编码匹配所以能正常展示。
    操作步骤:
    1. 先输出日志确认当前编码识别结果:
      print(response.encoding)
      print(response.headers.get('Content-Type'))
      
    2. 手动指定常见编码尝试解码,可依次测试gbk、gb2312、big5等中文编码:
      # 示例用gbk解码,解码错误自动替换为兼容字符
      readable_content = response.body.decode('gbk', errors='replace')
      
    3. 也可在settings.py中配置浏览器级编码检测逻辑,提升编码匹配准确率:
      DOWNLOADER_CLIENTCONTEXTFACTORY = 'scrapy.core.downloader.contextfactory.BrowserLikeContextFactory'
      
  • 非标准压缩内容未解压
    部分代理返回的压缩内容头不符合规范,Scrapy默认解压逻辑无法识别,导致返回二进制乱码。
    操作步骤:
    1. 检查响应压缩标识:print(response.headers.get('Content-Encoding'))
    2. 确认settings.py中压缩处理开关已开启:COMPRESSION_ENABLED = True(默认开启,可排查是否被自定义配置覆盖)
  • 请求头校验不通过
    站点除UA外还校验Accept、Accept-Language等请求头字段,爬虫请求头和浏览器不一致时,站点返回混淆加密内容。
    操作步骤:
    复制浏览器正常访问robots.txt时的全部请求头,配置到settings.py的DEFAULT_REQUEST_HEADERS中,对齐浏览器请求规则后重新测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:15:04