Python爬虫速成------Scrapy框架

Scrapy框架

Scrapy is a fast high-level web crawling and web scraping framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.

                                                                                                        ---------来自官方文档的介绍

Python爬虫速成------Scrapy框架_第1张图片

  1. Engine从Spider处获得爬取请求(Request)
  2. Engine将爬取请求转发给Scheduler,用于调度
  3. Engine从Scheduler处获得下一个要爬取的请求
  4. Engine将爬取请求通过中间件发送给Downloader
  5. 爬取网页后,Downloader形成响应(Response)通过中间件发给Engine
  6. Engine将收到的响应通过中间件发送给Spider处理
  7. Spider处理响应后产生爬取项(scraped Item)和新的爬取请求(Requests)给Engine
  8. Engine将爬取项发送给Item Pipeline(框架出口)
  9. Engine将爬取请求发送给Scheduler

Engine控制各模块数据流,不间断从Scheduler处获得爬取请求,直至请求为空。

数据流的出入口

框架入口:Spider的初始爬取请求

框架出口:Item Pipeline

用户只需编写(配置)Spider和Item Pipeline

Engine

  1. 控制所有模块之间的数据流
  2. 根据条件触发事件

不需要用户修改

Downloader

根据请求下载网页

不需要用户修改

Scheduler

对所有爬取请求进行调度管理

不需要用户修改

Downloader Middleware

目的:实施Engine、Scheduler和Downloader之间进行用户可配置的控制

功能:修改、丢弃、新增请求或响应

用户可以编写配置代码

Spider

  1. 解析Downloader返回的响应(Response)
  2. 产生爬取项(scraped item)
  3. 产生额外的爬取请求(Request)

需要用户编写配置代码

Item Pipelines

  1. 以流水线方式处理Spider产生的爬取项
  2. 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
  3. 可能操作包括:清理、检验和查重爬取项中的HTML数据、将数据存储到数据库

需要用户编写配置代码

Spider Middleware

目的:对请求和爬取项的再处理

功能:修改、丢弃、新增请求或爬取项

用户可以编写配置代码

requests 和 Scrapy的异同

相同点:

  1. 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线
  2. 两者可用性都好,文档丰富,入门简单
  3. 两者都没有处理js、提交表单、应对验证码等功能(可扩展)

不同点:

requests Scrapy
页面级爬虫 网站级爬虫
功能库 框架
并发性考虑不足,性能较差 并发性好,性能较高
重点在于页面下载 重点在于爬虫结构
定制灵活 一般定制灵活,深度定制困难
上手十分简单 入门稍难

Scrapy常用命令

命令 说明 格式
startproject 创建一个新工程 scrapy startproject [dir]
genspider 创建一个爬虫 scrapy genspider [options]
settings 获得爬虫配置信息 scrapy settings [options]
crawl 运行一个爬虫 scrapy crawl
list 列出工程中所有爬虫 scrapy list
shell 启动URL调试命令行 scrapy shell [url]

生成的工程目录

PS E:\scrapyDemo> tree /f                                 
卷 软件 的文件夹 PATH 列表
卷序列号为 54DD-69A2
E:.
│  scrapy.cfg ------------------->>部署Scrapy爬虫的配置文件
│
└─scrapyDemo ------------>>Scrapy框架的用户自定义Python代码
    │  items.py -------------->>Items代码模板(继承类)
    │  middlewares.py ------->>Middlewares代码模板(继承类)
    │  pipelines.py --------->>Pipelines代码模板(继承类)
    │  settings.py -------->>Scrapy爬虫的配置文件
    │  __init__.py --------->>初始化脚本
    
    │
    ├─spiders -------------->>Spiders代码模板目录(继承类)
    │  │  firstSpider.py ------>>生成的爬虫
    │  │  __init__.py ------>>初始文件,无需修改
    │  │
    │  └─__pycache__ -------->>缓存目录,无需修改
    │          firstSpider.cpython-37.pyc
    │          __init__.cpython-37.pyc
    │
    └─__pycache__ ----------->>缓存目录,无需修改
            settings.cpython-37.pyc
            __init__.cpython-37.pyc

Scrapy爬虫的使用步骤

步骤1:创建一个工程和Spider模板

步骤2:编写Spider

步骤3:编写Item Pipeline

步骤4:优化配置策略

Scrapy爬虫的数据类型

  1. Request类

    Request对象表示一个HTTP请求,由Spider生成,由Downloader执行

  2. Response类

    Response对象表示一个HTTP响应,由Downloader生成,由Spider处理

  3. Item类

    Item对象表示一个从HTML页面中提取的信息内容,由Spider生成,由Item Pipeline处理,Item类似字典类型,可以按照字典类型操作

Scrapy爬虫支持多种HTML信息提取方法:

  • Beautiful Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

推荐课程《Python网络爬虫与信息提取 》

你可能感兴趣的:(笔记)