最近在学爬虫,在配置环境中遇到几个麻烦,有个困扰不短时间的就是pyspider 的安装。
这里把安装完成的步骤捋一捋。我是在anaconda下的虚拟环境中安装的,所以,别的情况我不是很清楚。
-
安装
pycurl
$ pip install curl
-
安装
pyspider
$ pip install pyspider
-
尝试运行
$ pyspider
这里我就出问题了,显示importError
,源码里面使用了async
作为变量名,但是python3.7
以后async
已经是关键字了,所以会报错。(因为我的虚拟环境是3.7,懒得退了)
下面改动一下源码 -
修改
$ cd ~/anaconda3/envs/webspider/lib/python3.7/site-packages/pyspider
$ ack async
(ack是一个命令行的grep增强工具)
显示如下:
run.py231: async=True, get_object=False, no_input=False):245: poolsize=poolsize, proxy=proxy, async=async)365: webui_fetcher = ctx.invoke(fetcher, async=False, get_object=True, no_input=True, **fetcher_config)fetcher/tornado_fetcher.py81: def __init__(self, inqueue, outqueue, poolsize=100, proxy=None, async=True):89: self.async = async95: if self.async:117: if self.async:118: return self.async_fetch(task, callback)120: return self.async_fetch(task, callback).result()123: def async_fetch(self, task, callback=None):155: return self.ioloop.run_sync(functools.partial(self.async_fetch, task, lambda t, _, r: True))webui/app.py95: 'fetch': lambda x: tornado_fetcher.Fetcher(None, None, async=False).fetch(x),
可以看到,源码中有很多使用了很多处async
,我们进行修改。
使用vim修改是很快的,但是这里要注意,位于fetcher/tornado_fetcher.py
中有几个是导入tornado
包中的类名中也包含了async
,所以要注意,在修改这个文件时不要全局修改。(async
都可以改,Async
不能改,都是在类名中)
- 再次尝试运行
$ pyspider
又报错了
ValueError: Invalid configuration: - Deprecated option 'domaincontroller': use 'http_authenticator.domain_controller' instead.
这是WsgiDAV发布了版本 pre-release 3.x导致的。
修改 pyspider/webui/webdav.py 第203行:
config = DEFAULT_CONFIG.copy() config.update({ 'mount_path': '/dav', 'provider_mapping': { '/': ScriptProvider(app) }, #'domaincontroller': NeedAuthController(app), 'http_authenticator': { 'HTTPAuthenticator':NeedAuthController(app), }, 'verbose': 1 if app.debug else 0, 'dir_browser': {'davmount': False, #'enable': True, 'msmount': False, 'response_trailer': ''},})dav_app = WsgiDAVApp(config)
再次运行pyspider,成功!
➜ ~ pyspider allphantomjs fetcher running on port 25555[I 190509 15:43:32 result_worker:49] result_worker starting...[I 190509 15:43:33 processor:211] processor starting...[I 190509 15:43:33 tornado_fetcher:638] fetcher starting...[I 190509 15:43:33 scheduler:647] scheduler starting...[I 190509 15:43:33 scheduler:782] scheduler.xmlrpc listening on 127.0.0.1:23333[I 190509 15:43:33 scheduler:586] in 5m: new:0,success:0,retry:0,failed:0[I 190509 15:43:33 app:76] webui running on 0.0.0.0:5000
如果你出现特殊情况:
Error: Could not create web server listening on port 25555Error: Could not create web server listening on port 25555Error: Could not create web server listening on port 25555...
是因为你后台运行了phantomjs
,$ ps
PID TTY TIME CMD 371 ttys000 0:00.05 /Applications/iTerm.app/Contents/MacOS/iTerm2 --server /usr/bin/login -fqpl zhangyin /Applications/iTerm.app/Contents/MacOS/iTerm2 375 ttys000 0:01.19 -zsh 1351 ttys000 2:13.00 phantomjs --ssl-protocol=any --disk-cache=true /Users/zhangyin/anaconda3/envs/six/lib/python3.6/site-packages/pyspider/fetcher/pha 2289 ttys000 0:00.03 tmux new -s webspider 3708 ttys001 0:00.90 -zsh 2476 ttys002 0:00.85 -zsh 5958 ttys003 0:00.49 -zsh
杀掉进程就可以了$ kill -9 1351
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~