在centos7中分布式部署pyspider

下面是如何在CentOS 7中分布式部署Pyspider的完整攻略,分为以下几个步骤:

第一步:安装基础依赖包和Python环境

在CentOS 7系统中,执行以下命令进行基础依赖包和Python环境的安装:

yum -y install epel-release
yum -y install python-devel python-pip openssl-devel libffi-devel sqlite-devel
pip install --upgrade pip

第二步:安装Pyspider

在安装Pyspider前,我们需要先安装PhantomJS和Libxml2,执行以下命令进行安装:

yum -y install bzip2 fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6 libXrender* libXext* libX11* libpng* libjpeg*
curl -O http://cdn.bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.8-linux-x86_64.tar.bz2
tar -xvf phantomjs-1.9.8-linux-x86_64.tar.bz2
mv phantomjs-1.9.8-linux-x86_64 /usr/local/share/
ln -sf /usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs /usr/local/bin/
yum -y install libxml2-devel libxslt-devel

然后执行以下命令安装Pyspider:

pip install pyspider

第三步:配置Redis

在Pyspider中,需要使用Redis来存储任务队列等数据。使用以下命令安装Redis:

yum install -y redis
systemctl start redis
systemctl enable redis

第四步:配置Pyspider

默认情况下,Pyspider使用的是SQLite数据库,但在分布式部署中,我们需要使用Redis。我们需要编辑Pyspider的配置文件,它的位置在 ~/.config/pyspider/config.json。将以下代码添加到配置文件中:

{
    "scheduler": "pyspider.scheduler.redis_scheduler.RedisScheduler",
    "result_queue": "pyspider.result.redis_result.RedisResultWorker",
    "task_queue": "pyspider.task.redis_task.RedisTaskQueue",
    "projectdb": "pyspider.database.redis.projectdb.RedisProjectDB",
    "taskdb": "pyspider.database.redis.taskdb.RedisTaskDB",
    "resultdb": "pyspider.database.redis.resultdb.RedisResultDB",
    "message_queue": "pyspider.message_queue.redis_queue.RedisQueue"
}

第五步:启动Pyspider

分布式部署需要启动多个Pyspider节点,每个节点都需要运行Pyspider。假设我们需要启动两个节点,执行以下命令:

export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
pyspider --node 9001
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
pyspider --node 9002

第六步:访问Pyspider的监控页面

在浏览器中输入节点的地址加端口号,例如 http://192.168.1.100:9001,即可访问Pyspider的监控页面。其中9001指的是第一个节点的端口号,9002指的是第二个节点的端口号。

通过以上步骤,我们就成功地在CentOS 7中分布式部署了Pyspider。接下来,我们举两个具体的示例说明下如何在分布式环境下使用Pyspider:

示例一:爬取豆瓣电影Top250

  1. 在Pyspider的监控页面中点击“新建项目”,填写项目名称、起始URL和爬虫代码,并点击“创建”。

```
# -- coding: utf-8 --
from pyspider.libs.base_handler import *

class Handler(BaseHandler):
crawl_config = {
'headers': {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
}

   @every(minutes=24 * 60)
   def on_start(self):
       self.crawl('https://movie.douban.com/top250', callback=self.index_page, fetch_type='js')

   @config(age=10 * 24 * 60 * 60)
   def index_page(self, response):
       for each in response.doc('div.info > div.hd > a').items():
           self.crawl(each.attr.href, callback=self.detail_page)
       if response.doc('#paginator > a.next'):
           self.crawl(response.doc('#paginator > a.next').attr.href, callback=self.index_page, fetch_type='js')

   @config(priority=2)
   def detail_page(self, response):
       return {
           "title": response.doc('div#content > h1 > span:first-child').text(),
           "rating": response.doc('div.rating_self > strong').text(),
           "summary": response.doc('div#link-report > span').text(),
       }

```

  1. 点击“运行”,即可开始爬取豆瓣电影Top250。

示例二:使用Pyspider爬取当当网商品信息

  1. 在Pyspider的监控页面中点击“新建项目”,填写项目名称、起始URL和爬虫代码,并点击“创建”。

```
# -- coding: utf-8 --
from pyspider.libs.base_handler import *

class Handler(BaseHandler):
crawl_config = {
'headers': {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'
}
}

   @every(minutes=24 * 60)
   def on_start(self):
       self.crawl('http://search.dangdang.com/?key=python&act=input', callback=self.index_page)

   @config(age=10 * 24 * 60 * 60)
   def index_page(self, response):
       for each in response.doc('ul.bigimg > li > a').items():
           self.crawl(each.attr.href, callback=self.detail_page)
       if response.doc('a.next'):
           self.crawl(response.doc('a.next').attr.href, callback=self.index_page)

   @config(priority=2)
   def detail_page(self, response):
       return {
           "title": response.doc('div.name_info > h1').text(),
           "price": response.doc('div.price_s > span.price_n').text(),
           "author": response.doc('div.messbox_info > span:last-child > a').text(),
           "publisher": response.doc('div.messbox_info > span:nth-last-child(2) > a').text(),
           "publish_date": response.doc('div.messbox_info > span:nth-last-child(4)').text(),
           "isbn": response.doc('div.messbox_info > span:nth-last-child(3)').text(),
       }

```

  1. 点击“运行”,即可开始爬取当当网上关于Python的商品信息。

希望以上攻略能够对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在centos7中分布式部署pyspider - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL Server中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

    首先,我们需要使用 SQL 语句来把重复行数据合并为一行并用逗号分隔,可以通过以下步骤来完成: 步骤一:创建测试数据表 我们需要创建测试数据表,以便后面的两个示例可以使用相同的数据进行演示。下面是创建测试表的 SQL 语句: CREATE TABLE dbo.test_data ( id INT PRIMARY KEY, name NVARCHAR(50),…

    database 2023年5月21日
    00
  • 详解MySQL SELECT:数据表查询语句

    MySQL SELECT是一种用于数据表查询的语句,它可以筛选出需要的数据并返回结果。SELECT语句通常以以下形式进行: SELECT 列名1,列名2,列名3 … FROM 表名 WHERE 条件 其中,列名是需要查询的数据表的字段名称,可以指定多个字段名,以逗号分隔。表名是需要查询的数据表名,而WHERE条件则是可选的筛选条件,它用于指定查询所需数据…

    MySQL 2023年3月9日
    00
  • 关于mysql 的时间类型选择

    关于MySQL的时间类型选择,我们需要先了解MySQL中可选的时间类型,常用的时间类型包括: YEAR:年份,范围为1901~2155年,占用1个字节 DATE:日期,范围为1000-01-01到9999-12-31,占用3个字节 TIME:时间,范围为-838:59:59到838:59:59,占用3~5个字节(无符号和有符号的存储方式不同) DATETIM…

    database 2023年5月22日
    00
  • SQL 描述Oracle数据字典视图

    Oracle 数据字典视图是 Oracle 数据库管理的重要组成部分,它包含了 Oracle 数据库中各种对象的信息,包括表、索引、约束、序列、视图等等。使用 SQL 可以方便地查询数据字典视图,进而对数据库进行管理和优化。 以下是两个使用 SQL 查询 Oracle 数据字典视图的实例: 查询表的大小和行数 Oracle 数据字典视图中包含了表的大小和行数…

    database 2023年3月27日
    00
  • C++异常处理方式实例详解(超级详细!)

    C++异常处理方式实例详解(超级详细!) 异常处理方式简介 在C++中,当程序发生意外情况时,可以通过异常处理方式来进行处理。异常处理方式可以使程序在发生异常时,从当前执行流程中跳转到异常处理流程中去。 异常处理流程由 try/catch 语句块构成。try 语句块用于包含可能抛出异常的代码,而 catch 语句块则用于捕捉并处理异常,从而避免程序崩溃或未预…

    database 2023年5月21日
    00
  • MySQL中ADDDATE()函数的使用教程

    MySQL中ADDDATE()函数的使用教程 介绍 ADDDATE()函数用于向日期加上一定的时间间隔。可以将间隔以各种方式指定,例如天数、周数、月数、年数等。它的语法如下: ADDDATE(date, INTERVAL expr unit) 其中,date参数是日期表示,可以是一个日期直接量,也可以是从另一个函数、列、子查询或用户定义的变量中获得的值。ex…

    database 2023年5月22日
    00
  • SQL中表锁定(LOCK、UNLOCK)的具体使用

    SQL中的表锁定可以通过LOCK和UNLOCK语句实现,这可以保证在操作表的过程中并发执行的安全性。 LOCK和UNLOCK语句简介 LOCK语句 LOCK语句可以锁定指定的表,包括读锁和写锁(也称共享锁和排它锁)。 根据应用场景不同,可以使用以下两种方式: LOCK TABLE tablename READ:对指定表加读锁,可以允许其他事务通过SELECT…

    database 2023年5月22日
    00
  • MySQL 数据库中数据表超详细的基本操作

    以下是针对MySQL数据库中数据表的超详细基本操作攻略: 操作一:创建数据表 要创建一个数据表,你需要先确定数据表的名称以及各列的名称和数据类型。以下是创建一个名为“users”的数据表的示例代码: CREATE TABLE users ( id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部