前言
pyspider 带有强大的 WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,它支持多种数据库后端、多种消息队列、JavaScript 渲染页面的爬取,使用起来很方便,但是它的启动过程很不稳定,归纳总结以下可能会出现的问题。
pyspider GitHub 地址:GitHub - binux/pyspider
官方文档地址:Introduction - pyspider
准备过程
pyspider 是支持 JavaScript 渲染的,这个过程依赖于 PhantomJS,所以需要安装 PhantomJS
PhantomJS 安装 :官方网站下载对应的安装包: PhantomJS - Scriptable Headless Browser
下载完成后,将 PhantomJS 可执行文件所在的路径(windows:phantomjs-2.1.1-windows\bin)配置到系统环境变量中,也可以直接将 PhantomJS.exe 文件直接复制到 Python 的 Script 文件夹下,在 cmd 中可验证配置是否完成:
# 以下即为配置完成
C:\Users\Administrator>PhantomJS
phantomjs>
# 查看版本
C:\Users\Administrator>phantomjs -v
2.1.1
pyspider 安装:
pip3 install pyspider
pyspider 启动:
# 1.
pyspider all
# 2.
pyspider
常见错误与解决
错误一: 无效语法
Python 3.5 中引入了 async,但在 Python 3.7 中成为关键字,而 pyspider 中并没有对新版本做出相应的修改,仍将 async 当作变量名,所以会报错,解决方法将变量名为 async 的进行更改替换:
找出 pyspider 文件夹下的相关文件进行修改,我的在 Anaconda 环境下(G:\Anaconda\Lib\site-packages\pyspider):
需要更改的 pyhton 脚本为:
- pyspider\webui\app.py
- pyspider\run.py
- pyspider\fetcher\tornado_fetcher.py
参考修改 tornado 中导入过相关模块的文件:
- curl_httpclient.py
- httpclient.py
- simple_httpclient.py
修改方法:pycharm 中 Ctrl + R 批量修改;VS Code 中导入 pyspider 文件夹 点击搜索,即可文件夹中相关关键字一次性更改:
我这里将 async 改为了 rose,可自定义更改名称,eg:async_、async_1、async_mode
错误二:无效配置
wsgidav 发布的 3.0.0 版本目前仍然是测试版,相对于 2.x 更改了一些用法,pyspider 的 3.0 及以上版本在安装时,会默认安装 wsgidav 的 3.0.0 版本,需要降版本:
# 卸载
pip3 uninstall wsgidav
# 安装
python -m pip install wsgidav==2.4.1
错误三:PyCurl 安装错误
Command “python setup.py egg_info” failed with error code 1
这是 PyCurl 安装错误,需要安装 PyCurl 库:
安装地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl,下载相应的 wheel 文件即可
# 安装命令
pip3 install pycurl‑7.44.1‑pp38‑pypy38_pp73‑win_amd64.whl
Linux 下可参考:https://imlonghao.com/19.html
错误四:导入失败
这是 wsgidav 发布了版本 pre-release 3.x 导致的,所以需要降版本:
# 卸载
python -m pip uninstall werkzeug
# 安装
python -m pip install werkzeug==0.16.1
错误五:一直卡在 result_worker starting
解决方法一:
这也是我一直没解决的问题,翻阅了很多文章,发现问题在于 pyspider 框架并不稳定,以下博客看到的方法很有用:pyspider一直卡在result_worker starting的解决办法 ,同时开启两个终端启动 pyspider,然后关闭第一个终端,如果没用就多试几次:
解决方法二:
如果觉得上述方法很麻烦,可以将以下命令写成一个 bat 脚本,新建 txt 文件写入后保存,将后缀名改成 bat 即可,这样一次性即运行三个 cmd 窗口,若没有一个成功,则重新运行:
cmd /c:执行字符串指定的命令然后终止
start cmd /c pyspider all
start cmd /c pyspider all
start cmd /c pyspider all
注:第一天用没问题,第二天再打开出现了无限弹窗情况,望了解的大佬评论讲解一下
建议:测试之前设置一个终止进程,txt 文档输入以下命令保存后将后缀改为 bat 即可
taskkill /f /im cmd.exe
错误六:启动成功后,代理 WebUI 界面(localhost:5000),页面存在乱码且不能创建项目
更换浏览器打开或者多尝试几次,要么就重启 pyspider 即可成功,感觉确实不稳定:
总结
以上为 pyspider 启动中常见的问题,不知 pyspider 是在 Windows 下不稳定还是怎么样,启动并不顺畅,如有了解或者指正文章问题的,欢迎评论区留言交流~
参考文章:
https://blog.csdn.net/m0_47170642/
http://www.kaotop.com/it/313592.html
https://blog.csdn.net/weixin_39190382/