Scrapy在CentOS上报 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)

错误结果如下:


定位原因.png

最近开发爬虫系统,在windows操作系统的开发环境中自己所写代码运行正常,但是将爬虫通过scrapyd-client发布到scrapyd服务器上的时候基于Chromedriver开发的无视图爬虫却意外报错。

在网上搜索了下UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)这样的问题,可是解决方案大都是“设置系统的默认编码为utf-8”,在python3.6+的环境中程序表头默认添加了# -- coding: utf-8 --,这与我的实际情况并不相符,实际上我即使配置了默认编码也不能解决以上问题。
无可奈何,只能开始自我探索的过程,大概通过以下几步测试了程序:

  1. 修改CentOS服务器的默认语言改为zh_CN.UTF-8
  2. 将windows上的字体拷贝到CentOS服务器系统中
  3. 切换PhantomJS驱动,测试无视图浏览器的爬取效果
  4. 将start_urls修改为start_requests,并指定url编码
  5. 使用虚拟机测试Ubuntu Server的运行效果

经过上述步骤的多次测试,发现以上方法都不能解决问题。最后在打印了多处print()方法判断出错位置的时候,仔细看了下日志的反馈结果,如下标注:


出错位置.png

发现是middlewares报错,看了看中间件的代码,发现报错的地方是有print()方法,如下图所示:


报错原因.png

删除程序中所有print()方法scrapyd即可正常运行,理论上将print方法中的汉字换为英文也能解决问题。因为在服务器上print方法显得多余,所以没有测试这个方法

你可能感兴趣的:(Scrapy在CentOS上报 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128))