在服务器上搭建scrapy分布式爬虫环境的过程

2024-08-29 08:08

本文主要是介绍在服务器上搭建scrapy分布式爬虫环境的过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这段时间在用 scrapy 爬取大众点评美食店铺的信息,由于准备爬取该网站上全国各个城市的信息,单机跑效率肯定是跟不上的,所以只能借助于分布式。scrapy 学习自崔庆才老师的视频,受益颇多,代码简练易懂,风格清新。这里梳理一遍从刚申请的服务器环境配置,python 安装,到搭建能运行分布式爬虫的整个流程。

服务器我是申请的阿里云的学生机,腾讯云和美团云也申请了,相比起来还是阿里云用起来舒服,腾讯云使用体验最差。我装的是 centos 系统,以下也是 centos 下遇到的问题及解决问题的找过的链接。另外阿里云需要添加安全组规则,将后面会用到的端口放行,例如27017,6800等。

从机配置

1.python 的安装

在装过好几台服务器后总结出了最短且有效的装 python 的方法,参考了这篇文章这里简要总结一下

  • yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  • wget https://www.python.org/ftp/python/3.6.3/Python-3.6.3.tgz
  • mkdir /usr/local/python3
  • tar -zxvf Python-3.6.3.tgz
  • cd Python-3.6.3
  • ./configure --prefix=/usr/local/python3
  • make && make install
  • ln -s /usr/local/python3/bin/python3 /usr/bin/python3 创建 python3 的软链接
  • ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 创建 pip3 的软链接
  • 最后命令行下输入pip3python3 -V 验证一下是否都成功

2.mongodb的安装

在从机上都装上 mongodb,爬取的数据都存在各自的服务器上,之后再汇总。这里参考了这篇文章

  • vim /etc/yum.repos.d/mongodb-org-3.4.repo
  • [mongodb-org-3.4] 
    name=MongoDB Repository 
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/ 
    gpgcheck=1 
    enabled=1 
    gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
     
    将以上内容复制粘贴进去刚打开的窗口
  • yum -y install mongodb-org
  • systemctl enable mongod.service 设置开机启动
  • vim /etc/mongod.conf 编辑配置文件,注释掉 bindIp,并重启 mongodb
  • systemctl restart mongod.service 重启 mongodb,这条指令在 mongodb 挂掉时候可以使用
  • systemctl stop mongod.service 停止 mongodb

记录一下刚学习时命令行下的编辑操作,vim 打开文件后,insert 进行编辑,退出编辑 esc,shift+两下Z。查找关键词是:/+关键词

3.利用 pip3 安装 scrapy 等

一般正常顺序先pip3 install scrapy,接着肯定会报requirement Twisted>=13.1.0这种错误,一次偶然我先pip3 install scrapyd发现安装上了最新的 Twisted 组件,接着安装 scrapy也没再报错。所以为了省事,避开报错,建议先安装 scrapyd。

  • pip3 install scrapyd
  • pip3 install scrapy
  • pip3 install pymongo
  • pip3 install redis
  • pip3 install redis-client

安装完以上内容,基本能满足分布式从机的爬取。但是在命令行直接输入scrapy 和 scrapyd 发现会报错,提示command not found,这里可以通过创建软链接解决问题。

  • find / -name scrapy找到系统中scrapy所在的目录,选择在bin目录下的路径
  • ln -s /usr/local/python3/bin/scrapy /usr/bin/scrapy 这是在我的路径下创建的软链接
  • scrapy 命令行再输入scrapy发现已经可用

scrapyd 创建软链接的方法与上面一样,其实在后面加个d就好了(笑)

scrapy 创建软链接如下

scrapy创建软链接

scrapyd 创建软链接如下

这里写图片描述

在开启了 scrapyd 服务后发现监听 ip 为本机,想要远程访问需要将配置修改一下。先 ctrl+c 退出 scrapyd,打开 scrapyd 配置文件所在的文件夹

  • cd /usr/local/python3/lib/python3.6/site-packages/scrapyd
  • ls 列出 scrapyd 文件夹下所有文件
  • vim default_scrapyd.conf 打开配置文件
  • bind_address = 0.0.0.0 将绑定 ip 修改为 0.0.0.0,保存退出,再在命令行输入scrapyd会发现监听 ip 发生了变化。

由于从机的scrapyd需要后台运行,这里我采用了setsid scrapyd命令来后台开启服务,这样关闭窗口后仍能进行连接。 
需要结束scrapyd进程时,利用ps -ef | grep -i scrapyd查看PID号,再 kill -9 PID 结束进程。

主机配置

以上完成了从机的配置,接下里配置主机

主机和从机不同在于它需要提供 redis 服务来保存请求队列,所以主要是安装 redis 服务。参考了众多文章后,还是推荐这篇文章 
这里梳理一下过程:

  • yum install gcc
  • wget http://download.redis.io/releases/redis-3.0.6.tar.gz
  • tar zxvf redis-3.0.6.tar.gz
  • cd redis-3.0.6 建议将文件夹名字修改为redis看着简洁一些
  • vim redis.conf 打开 redis 配置文件
  • #bind 127.0.0.1 将绑定 ip 注释掉,以便远程访问
  • daemonize yes 在 redis.conf 中修改该选项为 yes,即后台运行
  • requirepass 后加上登陆密码
  • protected-mode no 关闭保护模式,接着保存退出
  • mkdir /etc/redis 
    cp redis.conf /etc/redis/6379.conf
     将 redis.conf 复制一份名为 6379.conf 到指定目录
  • cd utils 在原redis目录下打开utils文件夹
  • vim redis_init_script 修改启动脚本,并在开头添加如下代码 
    #!/bin/sh 
    #chkconfig: 2345 90 10 
    #description: Redis is a persistent key-value database 
  • cp redis_init_script /etc/init.d/redisd 将启动脚本复制为 redis
  • chkconfig redisd on 设置开机启动
  • service redisd start 启动 redis
  • service redisd stop 关闭 redis

遇到过的问题

以上内容完成了主机上 redis 服务的搭建,不过在使用过程中,遇到了以下报错, 
MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

原因是强制关闭 Redis 快照导致不能持久化,我采取了下面解决方法

redis-cli -a 密码 进入 redis 客户端,-a 后接之前配置文件中修改的密码 
127.0.0.1:6379> config set stop-writes-on-bgsave-error no 提示 ok 就可以了

通过主机与从机的搭建,分布式运行的条件有了,本地需要pip install scrapyd-client 安装 scrapyd 的客户端插件,另外由于我用的是 windows 系统,curl 命令需要再去下载,scrapyd-deploy 也是无法直接使用的,后来在 github 上找到了解决办法

  • 打开本地 Python\Python36\Scripts 目录
  • 创建名为scrapyd-deploy.bat 的文件
  • 写入"Python\Python36\python.exe" "Python\Python36\Scripts\scrapyd-deploy" %1 %2 %3 %4 %5 %6 %7 %8 
    %9

这样就可以是使用 scrapyd-deploy 了,具体使用请阅读官方文档 scrapyd scrapyd-client

这里写图片描述

END


这篇关于在服务器上搭建scrapy分布式爬虫环境的过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1117310

相关文章

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

mysql中的服务器架构详解

《mysql中的服务器架构详解》:本文主要介绍mysql中的服务器架构,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、mysql服务器架构解释3、总结1、背景简单理解一下mysqphpl的服务器架构。2、mysjsql服务器架构解释mysql的架

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

Navicat数据表的数据添加,删除及使用sql完成数据的添加过程

《Navicat数据表的数据添加,删除及使用sql完成数据的添加过程》:本文主要介绍Navicat数据表的数据添加,删除及使用sql完成数据的添加过程,具有很好的参考价值,希望对大家有所帮助,如有... 目录Navicat数据表数据添加,删除及使用sql完成数据添加选中操作的表则出现如下界面,查看左下角从左

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.