爬虫--Scrapy-CrawlSpider&分布式爬虫

CrawlSpider

CrawlSpider:
问题:如果我们想要对某一个网站的全站数据进行爬取?
解决方案:
1.    手动请求的发送
2.    CrawlSpider(推荐)

之前的事基于Spider类


CrawlSpider概念:CrawlSpider其实就是Spider的一个子类。CrawlSpider功能更加强大(链接提取器,规则解析器)。

代码:
1.    创建一个基于CrawlSpider的爬虫文件
a)    scrapy genspider –t crawl 爬虫名称  起始url

-------

scrapy.spiders.CrawlSpider

   创建项目:scrapy startproct

   创建爬虫:scrapy genspider –t crawl

   核心处理规则: from scrapy.spiders import CrawlSpider, Rule

 核心处理提取: from scrapy.linkextractors import LinkExtractor

创建工程scrapy startproject crawlSpiderPro

cd crawlSpiderPro

创建爬虫文件  scrapy genspider -t crawl chouti  dig.chouti.com

基于scrapySpider爬虫文件的和基于spider的不同之处

爬虫文件chouti.py

class ChoutiSpider(CrawlSpider):
    name = ‘chouti‘
    #allowed_domains = [‘dig.chouti.com‘]
    start_urls = [‘https://dig.chouti.com/‘]

    #实例化了一个链接提取器对象
    #链接提取器:用来提取指定的链接(url)
    #allow参数:赋值一个正则表达式
    #链接提取器就可以根据正则表达式在页面中提取指定的链接
    #提取到的链接会全部交给规则解析器
    link = LinkExtractor(allow=r‘/all/hot/recent/\d+‘)
    rules = (
        #实例化了一个规则解析器对象
        #规则解析器接受了链接提取器发送的链接后,就会对这些链接发起请求,获取链接对应的页面内容,就会根据指定的规则对页面内容中指定的数据值进行解析
        #callback:指定一个解析规则(方法/函数)
        #follow:是否将链接提取器继续作用到连接提取器提取出的链接所表示的页面数据中
        Rule(link, callback=‘parse_item‘, follow=),
    )

    def parse_item(self, response):
        print(response)

     # 对应的编写response.xpath()---存到items ----将items传给管道---在管道进行持久化存储
# follow=True 所有的页面数据

 link = LinkExtractor(allow=r‘/all/hot/recent/\d+‘)

---------------------------------------------

Rule(link, callback=‘parse_item‘, follow=True),

分布式爬虫

分布式爬虫:
1.    概念:多台机器上可以执行同一个爬虫程序,实现网站数据的分布爬取。
2.    原生的scrapy是不可以实现分布式爬虫?
  a)    调度器无法共享
  b)    管道无法共享
3.    scrapy-redis组件:专门为scrapy开发的一套组件。该组件可以让scrapy实现分布式。
  a)    下载:pip install scrapy-redis
4.    分布式爬取的流程:
  a)    redis配置文件的配置:
    i.    bind 127.0.0.1 进行注释
    ii.    protected-mode no   关闭保护模式
  b)    redis服务器的开启:基于配置配置文件----
  c)    创建scrapy工程后,创建基于crawlSpider的爬虫文件
  d)    导入RedisCrawlSpider类,然后将爬虫文件修改成基于该类的源文件
  e)    将start_url修改成redis_key = ‘XXX’
  f)    在配置文件中进行相应配置:将管道配置成scrapy-redis集成的管道
  g)    在配置文件中将调度器切换成scrapy-redis集成好的调度器
  h)    执行爬虫程序:scrapy runspider  xxx.py
  i)    redis客户端:lpush 调度器队列的名称 “起始url”

【补充】
#如果redis服务器不在自己本机,则需要在setting中进行如下配置
REDIS_HOST = ‘redis服务的ip地址‘
REDIS_PORT = 6379

【注意】近期糗事百科更新了糗图板块的反爬机制,更新后该板块的页码链接/pic/page/2/s=5135066,末尾的数字每次页面刷新都会变化,因此爬虫文件中链接提取器的正则不可写为/pic/page/\d+/s=5135066而应该修改成/pic/page/\d+

原文地址:https://www.cnblogs.com/foremostxl/p/10095663.html

时间: 2024-10-30 08:11:58

爬虫--Scrapy-CrawlSpider&分布式爬虫的相关文章

scrapy进行分布式爬虫

今天,参照崔庆才老师的爬虫实战课程,实践了一下分布式爬虫,并没有之前想象的那么神秘,其实非常的简单,相信你看过这篇文章后,不出一小时,便可以动手完成一个分布式爬虫! 1.分布式爬虫原理 首先我们来看一下scrapy的单机架构: 可以看到,scrapy单机模式,通过一个scrapy引擎通过一个调度器,将Requests队列中的request请求发给下载器,进行页面的爬取. 那么多台主机协作的关键是共享一个爬取队列. 所以,单主机的爬虫架构如下图所示: 前文提到,分布式爬虫的关键是共享一个reque

爬虫进阶之分布式爬虫编写

本篇文章将是『如何构建一个分布式爬虫』系列文章的最后一篇,拟从实战角度来介绍如何构建一个稳健的分布式微博爬虫.这里我没敢谈高效,抓过微博数据的同学应该都知道微博的反爬虫能力,也知道微博数据抓取的瓶颈在哪里.我在知乎上看过一些同学的说法,把微博的数据抓取难度简单化了,我只能说,那是你太naive,没深入了解和长期抓取而已. 本文将会以PC端微博进行讲解,因为移动端微博数据不如PC短全面,而且抓取和解析难度都会小一些.文章比较长,由于篇幅所限,文章并没有列出所有代码,只是讲了大致流程和思路. 要抓微

【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对IP的检测.本文介绍的是利用Redis数据库实现的分布式爬虫,Redis是一种常用的菲关系型数据库,常用数据类型包括String.Hash.Set.List和Sorted Set,重要的是Redis支持主从复制,主机能将数据同步到从机,也就能够实现读写分离.因此我们可以利用Redis的特性,借助req

python3 分布式爬虫

背景 部门(东方IC.图虫)业务驱动,需要搜集大量图片资源,做数据分析,以及正版图片维权.前期主要用node做爬虫(业务比较简单,对node比较熟悉).随着业务需求的变化,大规模爬虫遇到各种问题.python爬虫具有先天优势,社区资源比较齐全,各种框架也完美支持.爬虫性能也得到极大提升.本次分享从基础知识入手,涉及python 的两大爬虫框架pyspider.scrapy,并基于scrapy.scrapy-redis 做了分布式爬虫的介绍(直接粘贴的ppt截图)会涉及 redis.mongodb

如何构建一个分布式爬虫!

分布式爬虫概览何谓分布式爬虫?通俗的讲,分布式爬虫就是多台机器多个 spider 对多个 url 的同时处理问题,分布式的方式可以极大提高程序的抓取效率.构建分布式爬虫通畅需要考虑的问题(1)如何能保证多台机器同时抓取同一个URL?(2)如果某个节点挂掉,会不会影响其它节点,任务如何继续?(3)既然是分布式,如何保证架构的可伸缩性和可扩展性?不同优先级的抓取任务如何进行资源分配和调度?基于上述问题,我选择使用celery作为分布式任务调度工具,是分布式爬虫中任务和资源调度的核心模块.它会把所有任

开发网络爬虫应该怎样选择爬虫框架?

有些人问,开发网络爬虫应该选择Nutch.Crawler4j.WebMagic.scrapy.WebCollector还是其他的?这里按照我的经验随便扯淡一下: 上面说的爬虫,基本可以分3类: 1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j.WebMagic.WebCollector 3. 非JAVA单机爬虫:scrapy 第一类:分布式爬虫         爬虫使用分布式,主要是解决两个问题: 1)海量URL管理 2)网速 现在比较流行的分布式爬虫,是Apache的Nut

开发网络爬虫应该如何选择爬虫框架?

有些人问,开发网络爬虫应该选择Nutch.Crawler4j.WebMagic.scrapy.WebCollector还是其它的?这里依照我的经验随便扯淡一下: 上面说的爬虫,基本能够分3类: 1.分布式爬虫:Nutch 2.JAVA单机爬虫:Crawler4j.WebMagic.WebCollector 3. 非JAVA单机爬虫:scrapy 第一类:分布式爬虫         爬虫使用分布式.主要是解决两个问题: 1)海量URL管理 2)网速 如今比較流行的分布式爬虫,是Apache的Nut

python分布式爬虫打造搜索引擎--------scrapy实现

最近在网上学习一门关于scrapy爬虫的课程,觉得还不错,以下是目录还在更新中,我觉得有必要好好的做下笔记,研究研究. 第1章 课程介绍 1-1 python分布式爬虫打造搜索引擎简介 07:23 第2章 windows下搭建开发环境 2-1 pycharm的安装和简单使用 10:27 2-2 mysql和navicat的安装和使用 16:20 2-3 windows和linux下安装python2和python3 06:49 2-4 虚拟环境的安装和配置 30:53 第3章 爬虫基础知识回顾

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎

第1章 课程介绍 介绍课程目标.通过课程能学习到的内容.和系统开发前需要具备的知识 1-1 python分布式爬虫打造搜索引擎简介 第2章 windows下搭建开发环境 介绍项目开发需要安装的开发软件. python虚拟virtualenv和 virtualenvwrapper的安装和使用. 最后介绍pycharm和navicat的简单使用 2-1 pycharm的安装和简单使用 2-2 mysql和navicat的安装和使用 2-3 windows和linux下安装python2和python