python-3.6.5
scrapyd-1.2.0
Centos下Python3共存:链接
执行:pip3 install scrapyd
报错
Collecting Twisted>=8.0 (from scrapyd)
Could not find a version that satisfies the requirement Twisted>=8.0 (from scrapyd) (from versions: )
No matching distribution found for Twisted>=8.0 (from scrapyd)
官网下载Twisted:链接
[root@VM_129_36_centos ~]# ls
Twisted-18.7.0.tar.bz2 apps
[root@VM_129_36_centos ~]# tar -xjvf Twisted-18.7.0.tar.bz2
[root@VM_129_36_centos Twisted-18.7.0]# ls
CONTRIBUTING LICENSE NEWS.rst README.rst code_of_conduct.md docs setup.py tox.ini
INSTALL.rst MANIFEST.in PKG-INFO build dist setup.cfg src
[root@VM_129_36_centos Twisted-18.7.0]# python3 setup.py install
再次执行:pip3 install scrapyd
新建一个/etx/scrapyd/scrapy.conf
,Scrapy在运行的时候会读取此配置文件。
r
[root@VM_129_36_centos ~]# sudo mkdir /etc/scrapyd
[root@VM_129_36_centos ~]# sudo vi /etc/scrapyd/scrapyd.conf
官网配置文件:链接
1 [scrapyd]
2 eggs_dir = eggs
3 logs_dir = logs
4 items_dir =
5 jobs_to_keep = 5
6 dbs_dir = dbs
7 max_proc = 0
8 max_proc_per_cpu = 4
9 finished_to_keep = 100
10 poll_interval = 5.0
11 bind_address = 0.0.0.0
12 http_port = 6800
13 debug = off
14 runner = scrapyd.runner
15 application = scrapyd.app.application
16 launcher = scrapyd.launcher.Launcher
17 webroot = scrapyd.website.Root
18
19 [services]
20 schedule.json = scrapyd.webservice.Schedule
21 cancel.json = scrapyd.webservice.Cancel
22 addversion.json = scrapyd.webservice.AddVersion
23 listprojects.json = scrapyd.webservice.ListProjects
24 listversions.json = scrapyd.webservice.ListVersions
25 listspiders.json = scrapyd.webservice.ListSpiders
26 delproject.json = scrapyd.webservice.DeleteProject
27 delversion.json = scrapyd.webservice.DeleteVersion
28 listjobs.json = scrapyd.webservice.ListJobs
29 daemonstatus.json = scrapyd.webservice.DaemonStatus
**max_proc_per_cpu:**一台主机每个CPU最多运行4个Scrapy任务。
bind_address:默认是本地127.0.0.1,修改为0.0.0.0,可以让外网访问。
启动:scrapyd > ~/scrapyd.log &
将日志存在scrapyd.log中。
报错:
File "/usr/local/lib/python3.6/site-packages/Twisted-18.7.0-py3.6-linux-x86_64.egg/twisted/_version.py", line 8, in
from incremental import Version
ModuleNotFoundError: No module named 'incremental'
[root@VM_129_36_centos ~]# pip3 install incremental
报错:
builtins.ModuleNotFoundError: No module named '_sqlite3'
Failed to load application: No module named '_sqlite3'
[root@VM_129_36_centos ~]# yum install sqlite-devel
重新编译安装Python
./configure
sudo make
sudo make install
终于成功运行了。
[root@VM_129_36_centos Python-3.6.5]# scrapyd
2018-09-26T20:00:14+0800 [-] Loading /usr/local/lib/python3.6/site-packages/scrapyd/txapp.py...
2018-09-26T20:00:14+0800 [-] Scrapyd web console available at http://0.0.0.0:6800/
2018-09-26T20:00:14+0800 [-] Loaded.
2018-09-26T20:00:14+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] twistd 18.7.0 (/usr/local/bin/python3.6 3.6.5) starting up.
2018-09-26T20:00:14+0800 [twisted.scripts._twistd_unix.UnixAppLogger#info] reactor class: twisted.internet.epollreactor.EPollReactor.
2018-09-26T20:00:14+0800 [-] Site starting on 6800
2018-09-26T20:00:14+0800 [twisted.web.server.Site#info] Starting factory
2018-09-26T20:00:14+0800 [Launcher] Scrapyd 1.2.0 started: max_proc=4, runner='scrapyd.runner'
**访问地址:**http://0.0.0.0:6800/ # 在云上部署就换成自己的IP
配置完成后,Scrapy和它的接口都是可以公开访问的,我们来配置认证访问,借助Nginx做反向代理。
[root@VM_129_36_centos ~]# yum install nginx
[root@VM_129_36_centos ~]# vi /etc/nginx/nginx.conf
修改配置文件nginx.cong
,增加如下配置。
server {
listen 6801; # 这里我没有监听6800端口
location / {
proxy_pass http://127.0.0.1:6800/;
auth_basic "Restricted";
auth_basic_user_file /etx/nginx/conf.d/.htpasswd;
}
}
在/etc/nginx/conf.d/
目录下,创建用户名和密码。
**安装htpasswd:**htpasswd是Apache密码生成工具,Nginx支持auth_basic认证,因此我门可以将生成的密码用于Nginx中。
[root@VM_129_36_centos conf.d]# yum -y install httpd-tools
[root@VM_129_36_centos conf.d]# htpasswd -c .htpasswd admin
New password: # 输入两次密码
Re-type new password:
[root@VM_129_36_centos conf.d]# ls -la
total 12
drwxr-xr-x 2 root root 4096 Sep 26 20:12 .
drwxr-xr-x 4 root root 4096 Sep 26 20:08 ..
-rw-r--r-- 1 root root 44 Sep 26 20:12 .htpasswd
[root@VM_129_36_centos conf.d]# cat .htpasswd # 里面是自己的密码
[root@VM_129_36_centos conf.d]# nginx # 启动Nginx
htpasswd参数命令如下
-c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
-n 不更新passwordfile,直接显示密码
-m 使用MD5加密(默认)
-d 使用CRYPT加密(默认)
-p 使用普通文本格式的密码
-s 使用SHA加密
-b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
-D 删除指定的用户
pip install scrapyd-client
scrapyd-deploy -h # 检查是否部署成功
curl http://0.0.0.:6800/listprojects.json # 来获取当前主机的Scrapy项目
pip install python-scrapyd-api
>>> from scrapyd_api import ScrapydAPI
>>> scrapyd = ScrapydAPI('http://0.0.0.0:6800/')
>>> print(scrapyd.list_projects())
[]
可以通过Python直接获取主机上的Scrapy任务运行的状态。
Scrapyrt为Scrapy提供了一个调度的HTTP接口,有了它我们就不用再执行Scrapy而是通过HTTP请求接口来调度Scrapy任务。
当不需要分布式多任务的话Scrapyrt比Scrapyd更实用。
**注意:**如果不是分布式部署的话,这个比较好用。
[root@VM_129_36_centos ~]# pip3 install scrapyrt
[root@VM_129_36_centos ~]# scrapyrt # 默认在9080端口运行,必须要在Scrapy项目下,因为它需要scrapy.cfg文件
[root@VM_129_36_centos ~]# scrapyrt -p 9081 # 更换端口
我们来操作一系列HTTP接口来实现各种操作。
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程(不仅仅是 Python 进程)。除了对单个进程的控制,还可以同时启动、关闭多个进程,比如很不幸的服务器出问题导致所有应用程序都被杀死,此时可以用 supervisor 同时启动所有应用程序而不是一个一个地敲命令启动。
sudo yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
然后重新编译Python