📜  Scrapy-第一蜘蛛(1)

📅  最后修改于: 2023-12-03 14:47:18.958000             🧑  作者: Mango

Scrapy-第一蜘蛛

Scrapy-Logo

Scrapy是一款Python编写的开源网络爬虫框架,可以用来爬取互联网中的各种数据。它可以通过定义自己的管道(pipeline)和中间件(middleware)来定制化爬虫,从而实现数据的高效率、高质量地抓取和处理。

Scrapy的特点

以下是Scrapy的主要特点:

  • 基于Twisted异步网络框架;
  • 具备高度可定制性;
  • 对海量数据支持良好;
  • 支持自定义管道(pipeline)和中间件(middleware);
  • 支持多种数据格式,例如JSON、CSV等;
  • 支持常用的数据格式下载,并且支持数据异步处理;
  • 具备基础的反爬虫功能,包括请求头自定义、IP池设置等;
  • 具备基础的自动化测试能力。
Scrapy的工作流程

Scrapy的工作流程可以大概分为以下三个步骤:

  1. 指定起始URL;
  2. 发送HTTP请求并获取响应;
  3. 解析响应内容并做数据处理。

Scrapy采用异步非阻塞的方式,可以同时管理多个请求和响应,从而提高效率和性能。

Scrapy架构图

下图展示了Scrapy的主要组件和工作流程:

graph TB
A[Spider] -- 发送请求 --> B[Engine]
B -- 处理请求 --> C[Scheduler]
C -- 调度请求 --> B
B -- 将响应返回给Spider --> A
A -- 处理响应 --> D[Pipeline]
D -- 数据持久化 --> E[Database/File]

在Scrapy架构中,主要由Spider、Engine、Scheduler、Downloader、Item Pipeline、Feed Exporter等组件构成。其中:

  • Spider:主要负责URL的发起和响应后数据的解析;
  • Engine:是Scrapy的核心,调度各个组件工作;
  • Scheduler:调度器,负责接收Spider来的URL,并调度Engine将其对应的响应进行下载;
  • Downloader:下载器,用来下载网页;
  • Item Pipeline:数据段处理器,可以对数据进行清理、统一格式等操作;
  • Feed Exporter:数据导出器,可导出数据为JSON、CSV、XML等格式。
快速开始

以下是使用Scrapy爬取示例网站Quotes to Scrape(http://quotes.toscrape.com/)的示例代码:

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"

    def start_requests(self):
        urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = f'quotes-{page}.html'
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log(f'Saved file {filename}')

在终端中执行以下命令即可启动爬虫:

scrapy crawl quotes
结语

Scrapy是一款高效、灵活、易用的网络爬虫框架,可以帮助数据爱好者和程序员轻松实现对互联网中各种数据的抓取、清理和处理。使用Scrapy可以节省很多爬虫开发的时间和精力,大家可以尝试着去使用一下,相信肯定会让你眼前一亮!