zoukankan      html  css  js  c++  java
  • Scrapy 深入了解3

    全站爬虫

    核心

    - CrawlSpider实现的全站数据的爬取
        - 新建一个工程
        - cd 工程
        - 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com
    
        - 连接提取器LinkExtractor
            - 可以根据指定的规则对指定的连接进行提取
                - 提取的规则就是构造方法中的allow(‘正则表达式’)参数决定
        - 规则解析器Rule
            - 可以将将连接提取器提取到的连接进行请求发送,可以根据指定的规则(callback)对请求到的数据进行解析
        - follow=True:将连接提取器 继续作用到 连接提取器提取到的连接 所对应的 页面源码中
    

    分布式爬虫

    疑问?

    # 什么是分布式?
    	- 需要搭建一个由n台电脑组成的机群,然后在每一台电脑中执行同一组程序,让其对同一个网络资源 , 进行联合且分布的数据爬取。
        
    # 问什么 scrapy 不支持 分布式爬虫?
        - 为什么scrapy不可以实现分布式
            - 调度器不可以被共享
            - 管道不可以被共享
        - scrapy-reids组件的作用是什么
            - 提供可以被共享的管道和调度器
            
    # 实现方式:
    	- scrapy+scrapy_redis组件实现的分布式。scrapy+redis
    

    核心

        - 分布式的实现流程
            - 环境的安装:pip install scrapy-redis
            - 创建工程
            - cd 工程
            - 创建爬虫文件:
                - 基于Spider
                - 基于CrawlSpider
            - 修改爬虫文件:
                - 导报:
                    from scrapy_redis.spiders import RedisCrawlSpider#基于crawlSpider爬虫文件
                    from scrapy_redis.spiders import RedisSpider  #基于Spider爬虫文件
                - 将当前爬虫类的父类修改为RedisCrawlSpider
                - 删除allowed_domains和start_urls
                - 添加一个redis_key = ‘xxx’属性,表示的是调度器队列的名称、
                - 根据常规形式编写爬虫文件后续的代码
            - 修改settings配置文件
                - 指定管道
                    ITEM_PIPELINES = {
                            'scrapy_redis.pipelines.RedisPipeline': 400
                        }
                - 指定调度器
                    # 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
                    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
                    # 使用scrapy-redis组件自己的调度器
                    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
                    # 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
                    SCHEDULER_PERSIST = True
                - 指定redis数据库
                    REDIS_HOST = '192.168.13.254'
                    REDIS_PORT = 6379
            - 修改redis的配置文件redis.windows.conf
                - 关闭默认绑定
                    - 56行:#bind 127.0.0.1
                - 关闭保护模式
                    - 75行:protected-mode no
            - 启动redis的服务端(携带配置文件)和客户端
            - 启动分布式的程序:
                - scrapy runspider xxx.py
            - 向调度器的队列中扔入一个起始的url
                - 队列是存在于redis中
                - redis的客户端中:lpush sun www.xxx.com
             - 在redis中就可以查看爬取到的数据
    

    增量式

    核心

    - 增量式
        - 概念:监测
        - 核心技术:去重
        - 适合使用增量式的网站:
            - 基于深度爬取
                - 对爬取过的页面的url进行一个记录(记录表)
            - 基于非深度爬取
                - 记录表:爬取过的数据对应的数据指纹
                    - 数据指纹:就是原始数据的一组唯一标识
    
        - 所谓的记录表是以怎样的形式存在于哪?
            - redis的set充当记录表
    
    
  • 相关阅读:
    su命令Permission denied
    Linux网络故障
    nsswitch
    route命令
    GCC编译器原理(三)------编译原理三:编译过程(3)---编译之汇编以及静态链接【1】
    GCC编译器原理(三)------编译原理三:编译过程(2-2)---编译之语法分析
    GCC编译器原理(三)------编译原理三:编译过程(2-1)---编译之词法分析
    GCC编译器原理(三)------编译原理三:编译过程---预处理
    GCC编译器原理(二)------编译原理一:ELF文件(3)
    GCC编译器原理(二)------编译原理一:ELF文件(2)
  • 原文地址:https://www.cnblogs.com/dengz/p/14860806.html
Copyright © 2011-2022 走看看