分布式爬虫的创建与配置——实操演练

  scrapy_redis目前应用最多的一个分布式爬虫框架,与普通的scrapy相比,只需要在原有代码的基础上稍作修改,增加一些简单的配置文件即可实现分布式的数据抓取。本文以1905电影网为例,详细的介绍常见的分布式爬虫的创建与配置。

  首先通过scrapy框架,写好爬虫的基本功能部分。然后对爬虫继承的类进行简单的修改:

from scrapy_redis.spiders import RedisCrawlSpider  # 导入RedisCrawlSpider(如果你用的是Spider,则导入RedisSpider)

class DywSpider(RedisCrawlSpider):  # 将自定义的爬虫继承自RedisCrawlSpider
    name = ‘dyw‘
    redis_key = ‘start‘  # 设定redis_key,启动爬虫时需要用到
    allowed_domains = [‘1905.com‘]
    # start_urls = [‘https://www.1905.com/mdb/film/list/o0d0p1.html‘]  # 取消指定的起始url

    rules = (
        Rule(LinkExtractor(allow=r‘o0d0p\d+\.html‘), callback=‘parse_item‘, follow=True),
    )

    def parse_item(self, response):
        """
        页面解析
        :param response:
        :return:
        """
        li_list = response.xpath(‘/html/body/div[2]/div[1]/ul/li‘)
        for li in li_list:
            title = li.xpath(‘./div/p[1]/a/text()‘).get()
            item = FbsDywItem(title=title)  # 实例化item
            yield item

  然后在settings.py中添加配置信息,常见设置可以直接复制粘贴。将配置好的爬虫项目,完整的复制到每一台机器上。

ITEM_PIPELINES = {
    ‘scrapy_redis.pipelines.RedisPipeline‘: 400}  # scrapy_redis已经封装好的ITEM_PIPELINS,也可以根据需求添加自定义管道,将数据存储在mysql或其它地方
DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘  # scrapy_redis的过滤器,对url进行去重
SCHEDULER = ‘scrapy_redis.scheduler.Scheduler‘  # scrapy_redis的调度器
SCHEDULER_PERSIST = True  # True表示允许程序暂停,下次启动会沿用当前的request对象;False表示,每次启动程序都从头开始。建议为True

REDIS_HOST = ‘192.168.31.62‘  # 指定主机的redis的ip
REDIS_PORT = ‘6379‘  # 主机的redis的端口号,其他redis配置信息以同样的方式添加

  同时,需要修改redis的配置信息。找到redis的安装文件,打开redis.windows.conf,

第56行,bind127.0.0.1 关闭默认绑定,可以注释掉
第70行,protected-mode no 关闭保护模式,将yes改为no
设置好后,其他计算机才能对主机的redis服务端进行访问

  现在程序已经配置好,可以开始运行。

  首先携带配置信息启动redis的服务端,在终端中输入,redis-server redis.windows.conf,如果报错,可能是redis并没有被添加到环境变量中,此时可以切换到redis的安装目录下再启动(配置文件信息可能需要输入完整路径);若还是报错,检查redis服务是否已经开启,任务管理器-服务-redis,关闭即可。

  开启服务端后,再启动客户端,redis-cli。

  运行每一台机器的爬虫程序,在终端中切换到项目中spiders文件夹下,输入scrapy runspider 爬虫文件名(***.py),回车运行。若配置无误,则会出现:2020-03-24 17:54:05 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023,表示正在监听。此时,只需要将之前设定的redis_key和起始的url输入即可。切换到客户端,输入lpush redis_key(设定的key) 起始的url,回车运行,就可以看到爬虫程序已经开始跑起来了。

  注意,如果发现只有一台机器在爬取,其他的都在等待,可能是因为爬取的速度快于request对象生成的速度,导致其他机器没有获取到request,可以增加一个专门抓取url的方法。在python3.7中,运行时可能会报错,callback没找到,可尝试切换为3.6版本。

原文地址:https://www.cnblogs.com/xtjiaoyou/p/12560574.html

时间: 2024-08-30 04:00:08

分布式爬虫的创建与配置——实操演练的相关文章

OSPF多区域配置实操

OSPF理论 OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由.是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部.著名的迪克斯加算法(Dijkstra)被用来计算最短路径树.OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6

Mysql MHA(GTID)配置(实操)

实现环境 centos6.7 MYSQL5.6.36 主:192.168.1.191 从1:192.168.1.145 从2:192.168.1.146 监测:放在从2上 192.168.1.146 虚拟IP:192.168.1.222 准备软件包:下载链接: https://pan.baidu.com/s/1jHYafcU 密码: irbv epel-release-6-8.noarch.rpm   (所有服务器上都要) mha4mysql-node-0.56-0.el6.noarch.rpm

OSPF高级配置实操——大型公司环境部署

一.路由重分发概念 定义:即将一种路由协议中的路由条目转换为另一种路由协议的路由条目,达到多路由环境下的网络互通理解路由重分发1.一个单一IP路由协议是管理网络中IP路由的首选方案 2.Cisco ISO能执行多个路由协议,每一个路由协议和该路由协议所服务的网络属于同一个自治系统 3.Cisco ISO使用路由重分发特性以交换不同协议创建的路由信息路由重分发的考虑1.度量值 2.管理距离重分发到OSPF域中路由的路径类型1.类型1的外部路径(type1 external path,E1) 2.类

nginx反向代理服务器域名解析配置实操

1.进入nginx目录cd conf:创建文件夹 sudo mkdir vhost,cd vhost,sudo vim www.fanxing.store.conf,添加如下内容 server { default_type 'text/html'; charset utf-8; listen 80; autoindex on; server_name www.fanxing.store; access_log /usr/local/nginx/logs/access.log combined;

实操演练!MathType几个绝妙小技巧!

在论文中编写公式时MathType绝对是很多人不二的选择,它的功能比较完善,操作比较方便,包含的符号模板很多,易学易上手,这些都是它的优点.但是在使用MathType时,还有很多绝妙的小技巧,使用起来非常方便,你绝对想不到的! 一.修改页边距后调整公式对齐 文档做好后对页边距进行修改后会发现很多原来已经排版好的公式都无法对齐了,手动修改比较麻烦. 操作过程: 1.选中一个MathType公式,选择Word的"格式"菜单--"样式和格式",在右边出现文档中使用的样式然

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

Scrapy+Scrapy-redis+Scrapyd+Gerapy 分布式爬虫框架整合

简介:给正在学习的小伙伴们分享一下自己的感悟,如有理解不正确的地方,望指出,感谢~ 首先介绍一下这个标题吧~ 1. Scrapy:是一个基于Twisted的异步IO框架,有了这个框架,我们就不需要等待当前URL抓取完毕之后在进行下一个URL的抓取,抓取效率可以提高很多. 2. Scrapy-redis:虽然Scrapy框架是异步加多线程的,但是我们只能在一台主机上运行,爬取效率还是有限的,Scrapy-redis库为我们提供了Scrapy分布式的队列,调度器,去重等等功能,有了它,我们就可以将多

分布式爬虫-bilibili评论

实属课程需要,不然早就放弃在半路了.维持了断续半个多月的 bug 调试,突然就实现了.很是欣慰.网上关于分布式爬虫的都是一些介绍,实战的不多并且都很相似,说的云来雾去的,只是项目的流程.可能是项目一路顺风,而我 bug 不断.也好 记录下来供大家参考. 关于 scrapy-redis 环境配置 以及框架流程就不进行叙述了.网上也是一大堆的内容. 主要内容有: 1. 如何去写一个分布式爬虫 首先创建一个普通的爬虫,在保证此爬虫能正常运行的基础上进行修改,然后成为分布式爬虫.我的项目是在linux上

搭建 GFS 分布式文件系统-----实操

一.GlusterFS 简介: GFS是一个可扩展的分布式文件系统,用于大型的.分布式的.对大量数据进行访问的应用.它运行于廉价的普通硬件上,并提供容错功能.它可以给大量的用户提供总体性能较高的服务. 开源的分布式文件系统:由存储服务器.客户端以及 NFS/Samba 存储网关组成:(1)GlusterFS 特点: 扩展性和高性能:高可用性:全局统一命名空间:弹性卷管理:基于标准协议(2)模块化堆栈架构: 1.模块化,堆栈式结构:2.通过对模块的组合,实现复杂的功能:3.GlusterFS 工作