pyspider爬虫
来源:互联网 发布:考研数据结构 知乎 编辑:程序博客网 时间:2024/05/14 02:59
### pyspider
## 架构
scheduler(调度器)-->fetcher(抓取器)-->processor(脚本执行)-->output
各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。 scheduler 负责整体的调度控制。
任务由 scheduler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。
## 准备
1、由于python已经默认安装所以直接安装pip工具
下载安装包:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
执行安装文件:
sudo python get-pip.py
2、ubuntu安装scrapy,pyspider基于scrapy所以要先安装scrapy
使用pip安装scrapy:
sudo pip install scrapy
问题:
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
解决:
安装以下依赖:(大部分python的错误都是由于依赖没有安装全)
sudo apt-get install libxml2-dev libxslt1-dev python-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libevent-dev
sudo apt-get install python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev
安装pip组件:
sudo pip install lxml
3、安装pyspider
首先安装依赖包:
sudo apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml
使用pip安装pyspider:
sudo pip install pyspider
ps:另外也可以使用git下载项目,使用python安装,后来发现pip默认安装的是比较旧的版本,所以最好使用这种安装方法。
4、安装mysql
sudo apt-get install mysql-server mysql-client
配置mysql
(1)使用root进入数据库
mysql -uroot -p
(2)新建数据库
在mysql在执行
create database taskdb;
create database projectdb;
create database resultdb;
(3)新建用户pyspider
CREATE USER 'pyspider'@'%';
(4)改用户授权
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'@'%';
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'@'%';
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'@'%';
(5)修改mysql配置文件
sudo vi /etc/mysql/my.cnf
把bind 改为0.0.0.0
(6)重启数据库
sudo service mysql restart
(7)安装mysql-python
apt-get install python-mysqldb
5、安装redis
sudo apt-get install redis-server
(1)修改bind配置
sudo vi /etc/redis/redis.conf
测试redis
执行命令:
redis-cli
进入ip+端口> 就是安装成功了。
把bind 改为0.0.0.0
(2)重启redis
service redis-server restart
## 安装 PhantomJS
下载
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 问题:dpkg: 处理软件包 phantomjs (--install)时出错,有未满足的依赖
解决:
sudo apt-get -f install
## 单机
1、启动
本地需要自己写一个配置文件
sudo vi /pyspider/config.json
内容如下:
{
"taskdb": "mysql+taskdb://用户:密码@127.0.0.1:3306/taskdb",
"projectdb": "mysql+projectdb://用户:密码@127.0.0.1:3306/projectdb",
"resultdb": "mysql+resultdb://用户:密码@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": "UI登录用户账号",
"password": "UI登录用户密码",
"need-auth": true
}
}
启动命令:
pyspider -c /pyspider/config.json
安装 python-mysql、python-redis
sudo apt-get install python-mysqldb
sudo apt-get install python-redis
问题:
ImportError: No module named mysql.connector
解决:
sudo pip install mysql-connector
问题:
XXX read timeout
解决:
sudo pip --default-timeout=100 install XXX
pip install mysql-connector-python-rf==2.1.3
问题:
ImportError: No module named redis
解决:
sudo pip install redis
打开pyspider进行验证:
访问ip:5555
## 分布式
使用mastor-slave模式:主从模式
mastor参照以上的配置执行好后,
分布式搭建需要重复以上的
slave配置:
安装pip
安装scrapy
安装pyspider
安装 PhantomJS
配置config.json
{
"taskdb": "mysql+taskdb://用户:密码@mastor的ip:3306/taskdb",
"projectdb": "mysql+projectdb://用户:密码@mastor的ip:3306/projectdb",
"resultdb": "mysql+resultdb://用户:密码@mastor的ip:3306/resultdb",
"message_queue": "redis://mastor的ip:6379/db",
"phantomjs-proxy": "127.0.0.1:25555",
"fetcher": {
"xmlrpc-host": "mastor的ip"
}
}
启动:
slave机器只启动:
phantomjs、processor、fetcher
命令如下:
# 启动"唯一"的调度器实例
pyspider -c config.json scheduler
# 启动phantomjs
pyspider -c config.json phantomjs
# 启动 fetcher / processor / result_worker 实例,并根据需要可添加启动多个或在多台主机上启动形成分布式
pyspider -c config.json --phantomjs-proxy="localhost:25555" fetcher
pyspider -c config.json processor
pyspider -c config.json result_worker
# 启动webui, 如果webui和scheduler没在同一台主机上,需要添加参数 `--scheduler-rpc`来指定scheduler
pyspider -c config.json webui
## 架构
scheduler(调度器)-->fetcher(抓取器)-->processor(脚本执行)-->output
各个组件间使用消息队列连接,除了scheduler是单点的,fetcher 和 processor 都是可以多实例分布式部署的。 scheduler 负责整体的调度控制。
任务由 scheduler 发起调度,fetcher 抓取网页内容, processor 执行预先编写的python脚本,输出结果或产生新的提链任务(发往 scheduler),形成闭环。
每个脚本可以灵活使用各种python库对页面进行解析,使用框架API控制下一步抓取动作,通过设置回调控制解析动作。
## 准备
1、由于python已经默认安装所以直接安装pip工具
下载安装包:
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
执行安装文件:
sudo python get-pip.py
2、ubuntu安装scrapy,pyspider基于scrapy所以要先安装scrapy
使用pip安装scrapy:
sudo pip install scrapy
问题:
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
解决:
安装以下依赖:(大部分python的错误都是由于依赖没有安装全)
sudo apt-get install libxml2-dev libxslt1-dev python-dev
sudo apt-get install zlib1g-dev
sudo apt-get install libevent-dev
sudo apt-get install python-pip python-dev libffi-dev libssl-dev libxml2-dev libxslt1-dev libjpeg8-dev zlib1g-dev
安装pip组件:
sudo pip install lxml
安装以上依赖包,然后重新安装scrapy
大家看的好就顶一下,我写这个文章就是在技术学习的时候遇到许多坑,我想让大家绕过这些坑(百度排行不知道怎么排的,前面的都是些没用的,标题看着挺像,进去一看什么玩意)
3、安装pyspider
首先安装依赖包:
sudo apt-get install python python-dev python-distribute python-pip libcurl4-openssl-dev libxml2-dev libxslt1-dev python-lxml
使用pip安装pyspider:
sudo pip install pyspider
ps:另外也可以使用git下载项目,使用python安装,后来发现pip默认安装的是比较旧的版本,所以最好使用这种安装方法。
4、安装mysql
sudo apt-get install mysql-server mysql-client
配置mysql
(1)使用root进入数据库
mysql -uroot -p
(2)新建数据库
在mysql在执行
create database taskdb;
create database projectdb;
create database resultdb;
(3)新建用户pyspider
CREATE USER 'pyspider'@'%';
(4)改用户授权
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'@'%';
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'@'%';
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'@'%';
(5)修改mysql配置文件
sudo vi /etc/mysql/my.cnf
把bind 改为0.0.0.0
(6)重启数据库
sudo service mysql restart
(7)安装mysql-python
apt-get install python-mysqldb
5、安装redis
sudo apt-get install redis-server
(1)修改bind配置
sudo vi /etc/redis/redis.conf
测试redis
执行命令:
redis-cli
进入ip+端口> 就是安装成功了。
把bind 改为0.0.0.0
(2)重启redis
service redis-server restart
## 安装 PhantomJS
下载
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 问题:dpkg: 处理软件包 phantomjs (--install)时出错,有未满足的依赖
解决:
sudo apt-get -f install
## 单机
1、启动
本地需要自己写一个配置文件
sudo vi /pyspider/config.json
内容如下:
{
"taskdb": "mysql+taskdb://用户:密码@127.0.0.1:3306/taskdb",
"projectdb": "mysql+projectdb://用户:密码@127.0.0.1:3306/projectdb",
"resultdb": "mysql+resultdb://用户:密码@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": "UI登录用户账号",
"password": "UI登录用户密码",
"need-auth": true
}
}
启动命令:
pyspider -c /pyspider/config.json
安装 python-mysql、python-redis
sudo apt-get install python-mysqldb
sudo apt-get install python-redis
问题:
ImportError: No module named mysql.connector
解决:
sudo pip install mysql-connector
问题:
XXX read timeout
解决:
sudo pip --default-timeout=100 install XXX
pip install mysql-connector-python-rf==2.1.3
问题:
ImportError: No module named redis
解决:
sudo pip install redis
打开pyspider进行验证:
访问ip:5555
## 分布式
使用mastor-slave模式:主从模式
mastor参照以上的配置执行好后,
分布式搭建需要重复以上的
slave配置:
安装pip
安装scrapy
安装pyspider
安装 PhantomJS
配置config.json
{
"taskdb": "mysql+taskdb://用户:密码@mastor的ip:3306/taskdb",
"projectdb": "mysql+projectdb://用户:密码@mastor的ip:3306/projectdb",
"resultdb": "mysql+resultdb://用户:密码@mastor的ip:3306/resultdb",
"message_queue": "redis://mastor的ip:6379/db",
"phantomjs-proxy": "127.0.0.1:25555",
"fetcher": {
"xmlrpc-host": "mastor的ip"
}
}
启动:
slave机器只启动:
phantomjs、processor、fetcher
命令如下:
# 启动"唯一"的调度器实例
pyspider -c config.json scheduler
# 启动phantomjs
pyspider -c config.json phantomjs
# 启动 fetcher / processor / result_worker 实例,并根据需要可添加启动多个或在多台主机上启动形成分布式
pyspider -c config.json --phantomjs-proxy="localhost:25555" fetcher
pyspider -c config.json processor
pyspider -c config.json result_worker
# 启动webui, 如果webui和scheduler没在同一台主机上,需要添加参数 `--scheduler-rpc`来指定scheduler
pyspider -c config.json webui
1 0
- pyspider爬虫
- pyspider 爬虫教程
- PySpider python 爬虫
- Pyspider 爬虫使用说明
- pyspider 爬虫教程
- Pyspider爬虫教程
- python爬虫框架-PySpider
- pyspider爬虫设置延时
- pyspider爬虫的一个应用
- PySpider爬虫框架折腾体验
- Python 爬虫框架pyspider尝试
- pyspider爬虫框架源码分析
- pyspider爬虫的一个应用
- pyspider爬虫核心逻辑架构
- CentOS搭建PySpider爬虫服务
- pyspider 爬虫教程(一)
- pyspider 爬虫教程(二)
- pyspider 爬虫教程(三)
- swap自动挂载脚本
- PPL 中的取消操作
- handler(7) Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- php 并发 读写文件冲突的解决实例
- bzoj3110: [Zjoi2013]K大数查询
- pyspider爬虫
- 二维物体形状识别方法(一)
- poj 1189 钉子和小球
- Linux crontab定时执行任务 命令格式与详细例子
- Android内核开发:从源码树中删除出厂的app应用
- quartz 中JobExecutionContext的使用
- 颜色代码
- 在MFC里面实现线程的实例
- 用java在linux上写一个hello world