前言:经过小小折腾,安装好了pyspider。按照预期,在命令行输入pyspider all,然后再打开pyspider自带的webui就可以愉快地敲代码了。当我输入命令,duang,一连串的报错。填坑记录开始。。。
mark一下版本:python3.7(32位)
① 首先遇到了经典的语法错误无效:syntaxerror invalid syntax
看到这个的时候我一脸懵逼???我还什么都没写,就是想启动一下,怎么就会这样咧?莫非大佬的框架源码的某个地方敲错什么东西了?后面顺着往上看,发现一个小三角符号再async标注了。额,原来是async关键字被当成参数名了(这个框架是好几年前的了,python3.5的时候把async和await列为关键字,可能那时候作者写这个框架的时候还没有列为关键字)。。。
好吧,我去包里的源代码替换掉这个关键字(记得替换区分大小写!不然会遇到第②个坑)。从run.py修改
再运行,发现还报一样的错误,这次tornado_fetcher.py报错,再改。
再再运行,这回是webui目录下的app.py报错,再改。
② 使用的类的名字带有async的提示不存在该类
好不容易改完,本以为可以愉快地运行。没想到又双报错了。提示XXX类不存在。顺着错误找上去,发现怎么报错的是改动过的那几个py文件。这几个报错的类名中包含大写Async。原来是我全局搜索替换的时候忘记区分大小写,导致它们也被替换掉了。于是乎,我忍着泪又一个个慢慢的改回来了。
③ WsgiDAV版本问题
嘻嘻,总算改完了。这回总算可以了吧???输入pyspider all敲下回车启动,duang。咋滴个回事?又双叒报错。
报错内容”ValueError: Invalid configuration: - Deprecated option ‘domaincontroller’: use 'http_authenticator“。唉,又是动手搜索的时候,经查询,原因是WsgiDAV发布了版本 pre-release 3.x导致。
【解决方法1】
将wsgidav替换为2.4.1,使用命令:python -m pip install wsgidav==2.4.1
【解决方法2】
动手修改webui文件里面的webdav.py,修改webdav.py第209行
把
'domaincontroller': NeedAuthController(app),
修改为
'http_authenticator': {
'HTTPAuthenticator':NeedAuthController(app),
},
又双叒叕输入命令pyspider all,这回终于运行成功了。
- 这回启动你可以看到一个警告:FutureWarning: timeout is not supported on your platform. 由于我的是Windows,没有linux的timeout命令。算了,这不影响使用。。。
- 另外,如果没有给phantomjs设置环境变量,它还会提示phantomjs not finded。如果不使用phantomjs也不影响。
- webui默认running在5000端口, 可以打开http://localhost:5000/进入webui界面创建项目编写代码。如果5000端口被占用,可以通过命令pyspider webui --port xxxx来指定端口。
心好累,用了一下,可能webui界面编写代码不怎么习惯。于是我又双叒叕打开cmd,输入pip install scrapy,看着一个个进度条刷刷地到达100%而且没有报错,我欣慰地露出笑容。于是我打开搜索引擎,输入了那句熟悉的话,scrapy从入门到精通(入土)。
参考文章
pyspider 启动错误遇到的一些坑
ValueError: Invalid configuration: - Deprecated option ‘domaincontroller’: use 'http_authenticator