在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日

相关文章

  • Mysql 日期时间 DATE_FORMAT(date,format)

    当我们在使用 MySQL 数据库时,常常会遇到对日期时间进行格式化输出的需求。MySQL 提供了 DATE_FORMAT() 函数用来格式化日期时间值。 DATE_FORMAT() 函数接受两个参数:date和format。其中,date为日期时间值,可以是一个字符串,也可以是一个合法的日期时间类型的格式;format则为表示日期时间输出格式的字符串。 日期…

    database 2023年5月22日
    00
  • Node 模块原理与用法详解

    Node 模块原理与用法详解 什么是 Node 模块? Node 模块是 Node.js 中的核心概念之一,它是一个封装了特定功能的代码块,具有独立的作用域和生命周期,可以被其他模块引用。在 Node.js 中,每个文件都被视为一个模块,在文件内定义的变量、函数和类默认都是私有的,需要通过模块导出和引用的方式才能被外部模块所访问。 Node 模块可以分为三种…

    database 2023年5月22日
    00
  • 如何在Python中使用PyMongo库连接MongoDB数据库?

    以下是如何在Python中使用PyMongo库连接MongoDB数据库的完整使用攻略,包括安装PyMongo库、连接MongoDB数据库、插入数据、查询数据等步骤。同时,提供了两个示例以便更好理解如何使用PyMongo库连接MongoDB数据库。 步骤1:安装PyMongo库 在Python中,我们可以使用pip命令安装Py库。以下是安装PyMongo库的基…

    python 2023年5月12日
    00
  • centOS安装mysql5.7详细教程

    CentOS安装MySQL 5.7详细教程 本教程介绍CentOS系统下安装MySQL 5.7的详细步骤。 环境准备 在开始安装过程前,请确保你的CentOS系统已经安装了epel-release仓库和wget工具,如果没有,请先执行以下命令进行安装: sudo yum -y install epel-release wget 下载MySQL RPM包 访问…

    database 2023年5月22日
    00
  • Centos8安装mysql8的详细过程(免安装版/或者二进制包方式安装)

    以下是CentOS 8安装MySQL 8的详细过程。 准备工作 在开始安装之前,需要在CentOS 8上安装一些依赖项以支持MySQL 8。在终端中运行以下命令: sudo dnf install wget curl vim sudo dnf install libaio sudo dnf install numactl 这些命令将安装wget、curl和v…

    database 2023年5月22日
    00
  • 如何使用Python在MySQL中使用存储过程?

    当使用Python与MySQL交互时,可以使用存储过程来执行一系列SQL语句。存储过程是一组预编译的SQL语句,可以在MySQL中创建并在需要时调用。以下是使用Python在MySQL中存储过程的完整略,包括创建存储过程、调用存储过程和删除存储过程等步骤。同时,还提供了两个示例演如何在Python中使用MySQL存储过程。 创建存储过程 在Python中使用…

    python 2023年5月12日
    00
  • 数据库管理员(DBA)和数据库工程师的区别

    数据库管理员(DBA)和数据库工程师是两个不同的职业岗位,虽然他们都需要熟练掌握数据库的技术,但他们的职责、工作内容以及技术要求有很大的不同。下面将详细讲解这两个岗位的区别。 数据库管理员(DBA) 职责 数据库管理员(DBA)是负责数据存储和管理的专业人员。DBA负责数据库的安装、配置、维护和保护,以确保它们的可靠性、安全性和高效性。DBA的具体职责包括:…

    database 2023年3月27日
    00
  • PHP管理依赖(dependency)关系工具 Composer 安装与使用

    PHP管理依赖(dependency)关系工具 Composer 安装与使用 什么是 Composer Composer 是 PHP 依赖管理工具,它能够自动下载并安装 PHP 第三方库和类文件,同时也能管理这些依赖库之间的关系。使用 Composer,我们可以轻松的管理项目中的依赖关系,将精力更多地放到项目本身的实现上,提高开发效率。 Composer 安…

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