scrapy的运行环境你了解吗?

scrapy的运行环境你了解吗?
  • 本章目标

    • scrapy项目目录以及各路径文件的用处
    • scrapy的运行环境到底是怎样的
    • 如何精简爬虫项目文件
  • scrapy项目目录以及各路径文件的用处

    website
     ├── scrapy.cfg
     ├── test.py
     └── website
         ├── bloomfilter
         │   ├── bloomfilter.py
         │   ├── connection.py
         │   ├── defaults.py
         │   ├── dupefilter.py
         │   ├── picklecompat.py
         │   ├── pipelines.py
         │   ├── queue.py
         │   ├── scheduler.py
         │   ├── spiders.py
         │   ├── utils.py
         │   └── __init__.py
         ├── commands
         │   ├── crawlall.py
         │   ├── crawlsome.py
         │   ├── crawl_order_category.py
         │   ├── getname.py
         │   └── __init__.py
         ├── connection.py
         ├── extensions
         │   ├── openCloseLogStats.py
         │   └── __init__.py
         ├── items.py
         ├── middlewares.py
         ├── pipelines.py
         ├── settings.py
         ├── spiders
         │   ├── all_channel
         │   ├── base.py
         │   ├── base_crawl.py
         │   ├── buwei
         │   ├── difang
         │   └── __init__.py
         ├── tools
         │   ├── extract_domains.py
         │   ├── public.py
         │   └── __init__.py
         └── __init__.py
    
    • 第一级目录

      • 项目名:website
    • 第二级目录

      • scrapy.cfg
        • 定义了settings的相对路径
        • 定义了部署的相关配置
      • test.py: 测试文件。
      • website
    • 第三级别目录 website

      • bloomfilter: 集成的开源布隆过滤器

      • comands: 命令行目录

        • 命令行可以允许我们自定义爬虫调度方法
        • 也可以考虑用其他插件调度,比如scrapyd
      • connection.py

        • 数据库连接配置
        • 这里可以不需要,可直接写在settings.py中
      • exttensions

        • 自定义的扩展插件
      • items.py 实体映射关系

        • key-value结构
        • 用来存储你提取后的数据
        • 一个item实例可以看成数据库的一行数据或者部分字段数据
      • middlewares.py 中间件

        • 比如常用的随机请求user-agent可以定义在这里
        • 也可以在做一重定向拦截的中间件
        • 甚至加一些cookie
      • pipelines.py 管道

        • 用来处理你的数据过滤、数据处理、数据存储逻辑【针对一个item实例】
        • 你可以把数据插入es/mysql/mongodb/redis等等
      • settings.py 配置文件

        • 整个爬虫项目的配置文件
        • 默认的配置可以不用写
        • 所有自定义的扩展配置路径应该定义在这里
      • spiders 爬虫文件

        • 具体的爬虫解析逻辑
  • scrapy的运行环境到底是怎样的

    • 我们看下爬虫cfg文件

      • settings
        • 可以定义settings的相对路径
        • website.settings是指相对于第一层website的相对路径
          在这里插入图片描述
    • 写代码从helloword开始,探究世界从debug着手

      • 其实scrapy可以不指定配置文件,直接使用自带的函数接口即可,比如运行一个单个爬虫文件可以这么做:
        在这里插入图片描述

      • 我们看下这个方法做了什么?【ENVVAR = ‘SCRAPY_SETTINGS_MODULE’】
        在这里插入图片描述在这里插入图片描述

      • 发现了什么?

        • 爬虫文件的运行环境其实靠cfg文件中的配置决定的。
  • 如何简化scrapy项目?

     hot_rank
        ├── logs
        │   └── hot_rank.log
        ├── middlewares.py
        ├── scrapy.cfg
        ├── search_hots.py
        ├── settings.py
        └── spiders
            ├── __init__.py
            ├── baidu.py
            ├── sogouweixin.py
            └── weibo.py
    
    • 介绍:这是一个搜索百度、搜狗微信、微博的实时搜索爬虫, 入口是 search_hots.py

      import sys
      import json
      
      from scrapy import signals
      from scrapy.crawler import CrawlerProcess
      from scrapy.utils.project import get_project_settings
      from spiders.baidu import BaiduSpider
      from spiders.sogouweixin import SogouweixinSpider
      from spiders.weibo import WeiboSpider
      
      from scrapy.signalmanager import dispatcher
      
      
      def spider_results(spidername):
          spider_class = None
          if spidername == "baidu":
              spider_class = BaiduSpider
          elif spidername == "weixin":
              spider_class = SogouweixinSpider
          elif spidername == "weibo":
              spider_class = WeiboSpider
          else:
              return []
      
          results = []
      
          def crawler_results(signal, sender, item, response, spider):
              results.append(dict(item))
      
          dispatcher.connect(crawler_results, signal=signals.item_passed)
      
          process = CrawlerProcess(get_project_settings())
          process.crawl(spider_class) # spider_class可以是爬虫文件中name中的字符串, 也可以是import导入的类
          process.start()  # the script will block here until the crawling is finished
          return json.dumps(results, ensure_ascii=False).encode('gbk', 'ignore').decode('gbk')
      
      
      if __name__ == '__main__':
          if len(sys.argv) >= 2:
              spidername = sys.argv[1]
              searchresult = spider_results(spidername)
              print(searchresult)
      
    • 查看我定义的cfg文件

      [settings]
      default = settings
      
      [deploy]
      #url = http://localhost:6800/
      project = hot_rank
      
    • 其实settings的配置都可以省略,只是我这里加了个随机请求头的中间件middleware.py

    • spiders下是爬虫的抓取逻辑

      • 我的实体关系items直接定义在__init__.py
    • 完整代码:https://github.com/zhu733756/recommends/tree/master/hot_rank【如果有用,记得点个小星星】

    • 公众号:python爬虫小助手

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值