Debian 8.1 安装配置 pyspider 爬虫

简介

pyspider 是由 binux 开发的具有以下特性的开源 python 爬虫程序:

pyspider 的设计基础是:以 python 脚本驱动的抓取环模型爬虫

参考资料:pyspider 架构设计

安装

添加 Dotdeb 源 / 更新系统

由于我使用的是 Debian 系统,因此在安装 redis 的时候,我们可以直接使用 Dotdeb 的源。这样可以为我们节省很多编译的时间,也可以让我们节省不必要的配置工作。

首先,我们要将 Dotdeb 的源添加到 sources.list 当中。

将下面的代码添加到 /etc/apt/sources.list 中,你可以将他添加到最下面就好了。

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

然后我们需要安装 Dotdeb 的 GnuPG key

wget http://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

当你看到一个 ok 后,说明这个 GnuPG key 已经添加成功了,我们就可以更新系统了。

apt-get update
apt-get -y dist-upgrade

安装 pyspider

我们可以参照 Ubuntu 的系统安装来操作,参考:Deployment

apt-get install -y python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml supervisor git libssl-dev
git clone https://github.com/binux/pyspider
cd pyspider

个人比较系统用 UTC +8 的时间,因此你可以使用下面的代码选择中国的时区,当然,你也可以不进行这个操作

dpkg-reconfigure tzdata

然后我们可以安装 pyspider 了

pip install --allow-all-external -r requirements.txt
python setup.py install

安装 MySQL 数据库

我们需要使用 MySQL 数据库来存放我们的数据,因此我们就需要安装这个数据库了

apt-get install -y mysql-server

在安装的过程中会提示让您输入两次你的 root 密码,本例中使用 pyspider-pass 作为例子。

安装完后,我们需要新建数据库以及新建一个用户。考虑到今后可能会有集群的爬虫,因此新建的这个用户的主机名我们填写的是 %

连接到数据库

mysql -uroot -p

新建数据库

mysql> create database taskdb;
mysql> create database projectdb;
mysql> create database resultdb;

新建用户

mysql> CREATE USER 'pyspider'@'%';

用户授权(当然,有些权限你是可以不给的。

mysql> GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, TRIGGER, CREATE VIEW, SHOW VIEW, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, EVENT ON `taskdb`.* TO 'pyspider'@'%';
mysql> GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, TRIGGER, CREATE VIEW, SHOW VIEW, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, EVENT ON `projectdb`.* TO 'pyspider'@'%';
mysql> GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, TRIGGER, CREATE VIEW, SHOW VIEW, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TEMPORARY TABLES, LOCK TABLES, EVENT ON `resultdb`.* TO 'pyspider'@'%';

正如我们上面所说,我们可能会用到集群,因此我们将数据库的 bind 地址设置为 0.0.0.0。

编辑 /etc/mysql/my.cnf ,将 bind-address 修改为 0.0.0.0

bind-address            = 0.0.0.0

然后重启数据库

service mysql restart

安装 redis

apt-get install -y redis-server

同时,处于集群的考虑,我们可能需要将 redis 暴露在外网。

编辑 /etc/redis/redis.conf ,设置 bind 参数

bind 0.0.0.0

然后重启 redis 队列

service redis-server restart

由于 redis 是全部人都可以访问的,因此我们要用 iptables 阻止未授权的访问

iptables -A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP

安装 PhantomJS

这个方法是最快捷的方法,不过似乎…..所以只能用 Wheezy 版本的了

wget -O phantomjs_1.9.6-0wheezy_amd64.deb https://github.com/suan/phantomjs-debian/blob/master/phantomjs_1.9.6-0wheezy_amd64.deb?raw=true
dpkg -i phantomjs_1.9.6-0wheezy_amd64.deb

配置

配置 pyspider

pyspider 的配置请各位看官参考:Command Line

下面贴的是我的配置

{
  "taskdb": "mysql+taskdb://pyspider:pyspider-pass@127.0.0.1:3306/taskdb",
  "projectdb": "mysql+projectdb://pyspider:pyspider-pass@127.0.0.1:3306/projectdb",
  "resultdb": "mysql+resultdb://pyspider:pyspider-pass@127.0.0.1:3306/resultdb",
  "message_queue": "redis://127.0.0.1:6379/db",
  "phantomjs-proxy": "127.0.0.1:25555",
  "scheduler": {
    "xmlrpc-host": "0.0.0.0",
    "delete-time": 3600
  },
  "webui": {
    "port": 5555,
    "username": "imlonghao",
    "password": "pyspider-pass",
    "need-auth": true
  }
}

另外,我们将会使用 supervisor 来启动 pyspider ,为了避免安全问题的发生,我们将会为此特意新增一个用户,并将主目录设置为 /pyspider

useradd -md /pyspider pyspider

上面的配置文件我将其放置在 /pyspider/config.json ,并设置了一下权限

chown pyspider:pyspider config.json
chmod 400 config.json

配置 supervisor

编辑 /etc/supervisor/conf.d/pyspider.conf ,添加下面的内容

[program:pyspider]
command=/usr/local/bin/pyspider -c /pyspider/config.json
autorestart=true
user=pyspider
group=pyspider
directory=/pyspider
stopasgroup=true

保存后,通过下面的命令重启 supervisor

supervisorctl reload

结束

到此为止,pyspider 应该就运行在你的 ip:5555 上了