Crawlscrapy分布式爬虫

Stella981
• 阅读 551

1.概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取

2.原生的scrapy是不可以实现分布式式爬虫

  a)调度器无法共享

  b)管道无法共享

3.scrapy-redis 组件:专门为scrapy开发的一套组件,该组件可以让scrapy实现分布式

  a)pip install scrapy-redis

4.分布式爬取的流程:

  a)redis配置文件配置

    band 127.0.0.1 进行注释

  b)redis服务器开启

  c)创建scrapy工程后,创建基于crawlspider的爬虫文件 

  d)  导入RedisCrawlSpider类,然后将爬虫文件修改成基于该类的源文件

  e)将start_url 修改成 redis_key="xxx"

  f )将项目管道和调度器配置成基于scrapy-redis组件中

  g)执行爬虫文件:scrapy runspider xxx.py

  h)将起始url放置到调度器的队列中:redis-cli,lpush 队列的名称(redis-key)起始url

from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from redispro.items import RedisproItem
from scrapy_redis.spiders import RedisCrawlSpider

class QiubaiSpider(RedisCrawlSpider):
    name = 'qiubai'
    # allowed_domains = ['www.qiushibaike.com']
    # start_urls = ['https://www.qiushibaike.com/']

    #调度器队列的名称
    redis_key = 'qiubai'   # 表示跟start_urls含义是一样
    link = LinkExtractor(allow=r'/pic/page/\d+')
    rules = (
        Rule(link, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        div_list = response.xpath('//div[@id="content-left"]/div')
        for i in div_list:
            img_url = 'http' + i.xpath('.//div[@class="thumb"]/a/img/@src')
            item = RedisproItem()
            item['img_url'] = img_url

            yield item

setting

#使用scrapy-redis组件的去重队列
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#是否允许暂停
SCHEDULER_PERSIST = True


#如果redis服务器不在自己本机,则需要如下配置
REDIS_HOST = "112.21.68.59"
REDIS_PORT = 6379

ITEM_PIPELINES = {
#    'redispro.pipelines.RedisproPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline':400,
}
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Karen110 Karen110
2年前
使用Scrapy网络爬虫框架小试牛刀
前言这次咱们来玩一个在Python中很牛叉的爬虫框架——Scrapy。scrapy介绍标准介绍Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的
python爬虫增加多线程获取数据
Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不开Pyt
Stella981 Stella981
2年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Scrapy爬虫框架
(1)、简介在糗事百科爬虫中我们的爬虫是继承scrapy.Spider类的,这也是基本的scrapy框架爬虫,在这个爬虫中我们自己在解析完整个页面后再获取下一页的url,然后重新发送了一个请求,而使用CrawlsSpider类可以帮助我们对url提出条件,只要满足这个条件,都进行爬取,CrawlSpider类继承自Spider,它比之前的Spid
Stella981 Stella981
2年前
Scrapy框架之分布式操作
一、分布式爬虫介绍  分布式爬虫概念:多台机器上执行同一个爬虫程序,实现网站数据的分布爬取。1、原生的Scrapy无法实现分布式爬虫的原因?调度器无法在多台机器间共享:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start\_urls列表中的url。管
Stella981 Stella981
2年前
Scrapy_redis
简介scrapy\_redis是一个基于Redis的Scrapy组件,用于scrapy项目的分布式部署和开发你可以启动多个spider对象,互相之间共享有一个redis的request队列,最适合多个域名的广泛内容的爬取特点分布式爬取分布式数据处理爬取到的item数据被推送到redis中,这意味着你可以启动尽可能多的item处理程序
京东云开发者 京东云开发者
4个月前
线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队
前言之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。背景说明分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案消息表名:mqmessages数据量:3000多万索引:createtime和statuss
笑面虎 笑面虎
3星期前
【保姆级教学】Python爬虫、Selenium、Scrapy爬虫框架、反爬与反反爬、Appium
【保姆级教学】Python爬虫、Selenium、Scrapy爬虫框架、反爬与反反爬、Appium视频课程分享——【保姆级教学】Python爬虫、Selenium、Scrapy爬虫框架、反爬与反反爬、Appium,附源码文档下载。Python爬虫是一种自