Scrapy框架 五大核心组件和中间件

五大核心组件工作流程

  • 引擎(Scrapy)
    用来处理整个系统的数据流处理,触发事物(框架核心)
  • 调度器(Scheduler)
    用来接收引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回
  • 下载器(Downloader)
    用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)
  • 爬虫(Spiders)
    爬虫主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体(item),用户也可从中提取链接,让Scrapy继续抓取下一个页面
  • 项目管道(Pipeline)
    负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将发送到项目管道,并经过几个特定的次序处理数据

Scrapy框架 五大核心组件和中间件_第1张图片


scrapy的中间件

爬虫中间件:基本下载中间件就能够做所有事情
下载中间件:处于引擎和下载之间
  • 作用:批量拦截所有的请求和响应
    • 拦截请求:
      • 篡改请求的头信息(UA)
      • 修改请求对应的ip(代理)

# middlewares.py
class Movie4567DownloaderMiddleware:
    # 拦截正常请求
    def process_request(self, request, spider):
        # 进行UA伪装
        request.headers['User-Agent'] = random.choice(user_agent_list)

        # 代理
        request.meta['proxy'] = 'https://60.179.200.202:3000'
        return None

    # 拦截所有响应
    def process_response(self, request, response, spider):
        # Called with the response returned from the downloader.

        # Must either;
        # - return a Response object
        # - return a Request object
        # - or raise IgnoreRequest
        return response

    # 拦截发生异常的请求对象
    def process_exception(self, request, exception, spider):
        # 拿取到错误的request进行修正
        return request      # 将修正后的正常请求对象进行重新发送
# settings.py
DOWNLOADER_MIDDLEWARES = {
   'movie4567.middlewares.Movie4567DownloaderMiddleware': 543,
}

你可能感兴趣的:(python,#,python爬虫)