zoukankan      html  css  js  c++  java
  • 分布式爬虫基于scrapy

    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. project-mode no 关闭保护模式

      b) redis 服务器的开启:基于配置配置文件

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

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

      e) 将start_url修改成redis_key = "xxx" (此名字用于redis lpush name value) #name:xxx  value:start_url  # keys *    #查看数据 lrange name:items 0 -1 第一行看到最后一行

      

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

      g) 执行爬虫文件:scrapy runspider qiubai.py  (运行py文件进入listen状态)

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

    spider/qiubai.py

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy.linkextractors import LinkExtractor
    from scrapy.spiders import CrawlSpider, Rule
    from handle4.items import Handle4Item
    from scrapy_redis.spiders import RedisCrawlSpider  # 注意方法
    
    
    class QiubaiSpider(RedisCrawlSpider):
        name = 'qiubai'
        # allowed_domains = ['www.qiushibaike.com/pic']
        # start_urls = ['https://www.qiushibaike.com/pic/']
        redis_key = "qiubaispider"
        link = LinkExtractor(allow=r'www.qiushibaike.com/pic/page/d+?')
        rules = (
            Rule(link, callback='self.parse_item', follow=True),
        )
    
        def parse_item(self, response):
            div_list = response.xpath('//*[@id="content"]/div')
            for div in div_list:
                item = Handle4Item()
                img_url = 'https:' + div.xpath('//div[@class="thumb"]/a/img/@src').extract_first()
                item["img_url"] = img_url
                yield item
            # return i
  • 相关阅读:
    Google Chrome中的高性能网络 (三)
    Linux入门基础 #5:Linux文件系统挂载管理
    git学习 #2:git基本操作
    ural 1018 Binary Apple Tree(树形dp | 经典)
    MST最小生成树及Prim普鲁姆算法
    UVA 10465 Homer Simpson(dp + 完全背包)
    Android 微信SDK分享功能中的最全过程步骤分析
    python第三方库推荐
    C. Tourist Problem
    Shell脚本编程——了解你的Linux系统必须掌握的20个命令
  • 原文地址:https://www.cnblogs.com/cjj-zyj/p/10169806.html
Copyright © 2011-2022 走看看