日期: 2018/08/16
操作系统: CentOS Linux release 7.4.1708
Python版本: Python 2.7.5
玩Python少不了搞搞爬虫,搞爬虫少不了搞搞Scrapy,搞Scrapy少不了写个HelloScrapy,写HelloScrapy少不了踩坑???
是的,入门第一坑。
因为之前搞过Django环境,所以基本上要安装的东西都有了。Scrapy的安装通过pip命令也是非常简单,百度一下,安装以及入门教程,几个命令几行代码,第一个爬虫已经整装待发,就差一声令下了。
事不宜迟——
scrapy crawl example
结果等待我的却是一个ImportError: No module named _util
很遗憾,没有吧当时的异常信息复制下来,现在环境搞好了就懒得重新去搞坏它了,总之,就是scrapy调用到了一个叫Twisted的模块,Twisted又调用到了OpenSSL模块,但是它需要from OpenSSL._util import lib
。尴尬的是OpenSSL里没有_util这个模块!所以就报错了。
这时候当然还是百度看看有没有踩过同样坑的前辈啦,然而没有找到能帮我解决问题的帖子或博客。
于是只好自己想办法,捣鼓了一阵,还是一头雾水,冷静一下,其实问题还是很明显的,应该是版本问题。
那就把所有相关的依赖版本都更新了一下,费了不少力气,然并卵。
再冷静一下,其实问题真的很明显的,肯定是版本问题——更新不行就回退啊!
那么怎么回退呢?pip卸载模块的命令了解一下,然后再了解一下怎么在安装的时候指定版本,这都不是事儿,看命令帮助或者更简单点百度一下。
问题是回退哪些模块?回退到什么版本?
哪里出错?Twisted调用OpenSSL时出错,那么就是这两个不匹配,那就是拿这两个开刀。
回退到什么版本?机智如我,这时候还是要去官网看看啊!
https://doc.scrapy.org/en/latest/intro/install.html#intro-install
The minimal versions which Scrapy is tested against are:
- Twisted 14.0
- lxml 3.4
- pyOpenSSL 0.14
就是它了。
于是卸载并重装了pyOpenSSL ,
pip uninstall pyopenssl
pip install pyopenssl==0.14
试着启动爬虫,可惜,还不行。
于是接着重装了Twisted ,再试,终于成功了!
结论:
百度虽然很好用,但不一定任何时候都能帮你解决问题,遇到问题还是得自己冷静思考,其实问题有可能真的【很明显】。