From:官方文档 --- 快速开始:http://docs.pyspider.org/en/latest/Quickstart/
pyspider github 地址:https://github.com/binux/pyspider
pyspider 官方文档:http://docs.pyspider.org/en/latest/
爬虫框架 pyspider个人总结(详细)熟悉:https://www.jianshu.com/p/39c7371dd6c2
python3.7+ 与 pyspider 的坑
python3.7+ 与 pyspider 的坑:https://zhuanlan.zhihu.com/p/115629460
安装 pyspider :pip install pyspider
安装之后先验证是否安装成功,在CMD下输入
pyspider # 或者 pyspider all,但是后面执行 pyspider all 好像还卡死。。。
# 两者是一样的,新的 pyspider框架已经整合了,所以使用 pyspider 就好
执行完报错:
Traceback (most recent call last):
File "/ffk_learn/software/Python-3.7.0/ffk_py/bin/pyspider", line 7, in <module>
from pyspider.run import main
File "/ffk_learn/software/Python-3.7.0/ffk_py/lib/python3.7/site-packages/pyspider/run.py", line 231
async=True, get_object=False, no_input=False):
^
SyntaxError: invalid syntax
因为从 python3.5 开始把 async 和 await 设为关键字了,这里 async
解决方法:将相关脚本里面的 async 换一个名字即可,当然最好还是要 pyspider 的大佬更新下 pyspider 脚本。涉及的脚本文件有以下 3 个:
- 1 ffk_py/lib/python3.7/site-packages/pyspider/run.py
- 2 ffk_py/lib/python3.7/site-packages/pyspider/fetcher/tornado_fetcher.py
- 3 ffk_py/lib/python3.7/site-packages/pyspider/webui/app.py
找到对应的 py 文件,将 async 修改为其他名称,
我这里修改为 shark ( 我本机路径:C:\Python38\Lib\site-packages\pyspider )。在以下几个文件中存在:
pyspider ---> run.py
pyspider ---> fetcher ---> tornado_fetcher.py
pyspider ---> webui ---> app.py
修改时注意:不要全部替换,只替换函数中的参数,和字段部分
修改完后,使用 pyspider 命令,输入 http://localhost:5000 运行出现下面错误
ValueError: Invalid configuration: - Deprecated option 'domaincontroller': use 'http_authenticator
原因是因为 WsgiDAV 发布了版本 pre-release 3.x。
解决方法如下:在安装包中找到 pyspider 的资源包,然后找到 webui 文件里面的 webdav.py 文件打开,
修改第 209 行:
'domaincontroller': NeedAuthController(app),
修改为:
'http_authenticator':{
'HTTPAuthenticator':NeedAuthController(app),
},
修改后截图:
如果不想修改源文件,第二种方法:降低版本,因为 3.0 的版本不兼容,所以替换为 2.4.1
pip uninstall wsgidav
pip install wsgidav==2.4.1
这里使用修改源码的方式,修改完,保存,然后再执行 pyspider ,这时会报如下错误:
原因:
- 1、没有安装 werkzeug
- 2、werkzeug 的版本为 1.0.0,这个版本中没有 DispatcherMiddleware 方法
解决办法:卸载 werkzeug,重新安装低版本的 werkzeug
# 卸载
python -m pip uninstall werkzeug
# 安装指定版本
python -m pip install werkzeug==0.16.0
# 0.16 版本不行可以再试 0.15 版本
# python -m pip install werkzeug==0.15
再次执行 pyspider ( 执行 pyspider all 一直卡到 result_worker starting… ,不知道为啥。网上说如果一直卡在 result_worker starting,可以新打开一个终端(这个终端暂时不关),再次输入pyspider,输入完成后再关闭第一个终端),说明成功了
浏览器访问 http://localhost:5000 就可以打开页面了。
pyspider 介绍
快速上手
安装之后先验证是否可以正常使用
- 打开控制台, cd到你要创建的项目路径
- 输入
pyspider
或 pyspider all
- 当看到如下信息时说明 pyspider 启动成功
(base) D:\pyspider_test\test1>pyspider
c:\users\zh\anaconda3\lib\site-packages\pyspider\libs\utils.py:196: FutureWarning: timeout is not supported on your platform.
warnings.warn("timeout is not supported on your platform.", Future
Warning)
[I 191030 19:27:06 result_worker:49] result_worker starting...
[I 191030 19:27:06 processor:211] processor starting...
[I 191030 19:27:06 tornado_fetcher:638] fetcher starting...
[I 191030 19:27:06 scheduler:647] scheduler starting...
[I 191030 19:27:06 scheduler:782] scheduler.xmlrpc listening on 127.
0.0.1:23333
[I 191030 19:27:06 scheduler:126] project douban_top250 updated, sta
tus:TODO, paused:False, 0 tasks
[I 191030 19:27:06 scheduler:586] in 5m: new:0,success:0,retry:0,fai
led:0
[I 191030 19:27:07 app:76] webui running on 0.0.0.0:5000
phantomjs fetcher running on port 25555
- 打开浏览器, 访问 http://localhost:5000/,进入 pyspider 控制台
- 点击 Create ,输入 项目名(Project Name )和 要爬取的 目标网站(Start URL(s))
- 你将会看到这样一个页面:
- 代码区没有自动补全功能, 你可以在 pycharm 上写好粘过来,再进行调试,以 www.baidu.com 为例
- 调试好之后,回退到主页面,将状态改为
DEBUG
就可以运行爬取工作了 - 你可以通过把鼠标放到
progress
中的4个进度条上以查看执行状态详情, 当all
变成纯绿色, 就代表爬虫执行完毕 - 点击
Results
, 可以查看你爬取到的内容
删除项目
第一种方法,将目标项目的status改成STOP
,然后点击[group]
,输入delete,如图,
pyspider 会在 24H 后自动删掉这个项目
第二种方法,到你创建项目的文件夹,删除 data
文件夹,就会删除当前文件夹中所有的项目