📜  Scrapy-概述(1)

📅  最后修改于: 2023-12-03 15:20:01.195000             🧑  作者: Mango

Scrapy-概述

Scrapy 是 Python 开发的一个快速、高效、灵活且可扩展的网络爬虫框架,可用于数据挖掘、信息处理或存储在不同的容器中。Scrapy 使用 Twisted 框架处理异步网络通信,并支持多线程处理,具有自动化的 URL 完整性控制以及内置的数据解析器。

特点
  • 基于 Twisted 框架,异步非阻塞式处理任务,可以高效利用 CPU 和 I/O 的资源;
  • 支持插件,可以根据需要选择解析框架、存储方式等等;
  • 自带数据解析器,支持多种数据格式,包括 JSON、XML、HTML 等等;
  • 灵活分布式架构,多个节点爬取和解析任务可分配给不同的集群;
  • 自带数据去重和 URL 完整性控制,避免了重复爬取和漏洞 URL 的问题。
安装

Scrapy 可以简单通过 pip 工具安装。

pip install Scrapy
使用

创建一个 Scrapy 项目的方法如下:

scrapy startproject project_name

项目创建成功后,进入到项目目录,可以看到以下文件结构:

project_name/
    scrapy.cfg
    project_name/
        __init__.py
        items.py
        middlewares.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            spider_name.py
  • scrapy.cfg:Scrapy 项目的配置文件;
  • project_name:项目 Python 包,包含了项目的核心代码和配置;
  • items.py:定义数据模型;
  • middlewares.py:自定义中间件;
  • pipelines.py:自定义数据处理管道;
  • settings.py:项目配置;
  • spiders:爬虫目录,用于编写不同的爬虫。

编写一个 Scrapy 爬虫,需要在 spiders 目录下创建一个 Python 文件,Scrapy 提供了针对不同网站的默认爬虫类,也可以继承自一个通用类来编写自己定制的爬虫。

以下是一个简单的 Scrapy 爬虫实例:

import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('span small::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

        next_page = response.css('li.next a::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

这个爬虫可以从 http://quotes.toscrape.com/page/1/ 开始,爬取每一页的名言,包括文本、作者和标签。结果将存储在 Scrapy 的默认数据解析器中。

总结

Scrapy 是一个非常强大的网络爬虫框架,它的异步非阻塞式处理方式和自带数据解析器、去重等功能,可以帮助你高效地完成爬虫任务。同时,Scrapy 的灵活插件机制,也使得它可以适应不同的爬虫场景,并且具有可扩展性。