简介
pyspider 是由 binux 开发的具有以下特性的开源 python 爬虫程序:
- 抓取、更新调度多站点的特定的页面
- 需要对页面进行结构化信息提取
- 灵活可扩展,稳定可监控
pyspider 的设计基础是:以 python 脚本驱动的抓取环模型爬虫
- 通过 python 脚本进行结构化信息的提取, follow 链接调度抓取控制,实现最大的灵活性
- 通过 web 化的脚本编写、调试环境。 web 展现调度状态
- 抓取环模型成熟稳定,模块间相互独立,通过消息队列连接,从单进程到多机分布式灵活拓展
参考资料: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 上了