自学内容网 自学内容网

【Scrapy】 Scrapy 爬虫框架


准我快乐地重饰演某段美丽故事主人
饰演你旧年共寻梦的恋人
再去做没流着情泪的伊人
假装再有从前演过的戏份
重饰演某段美丽故事主人
饰演你旧年共寻梦的恋人
你纵是未明白仍夜深一人
穿起你那无言毛衣当跟你接近
                     🎵 陈慧娴《傻女》


Scrapy 是一个用于提取网页数据的开源和协作爬虫框架。它是由 Python 编写的,设计用于高效地从网站中提取数据。Scrapy 提供了一种简单、灵活和可扩展的方式来创建网页爬虫,并且在处理复杂网站时特别强大。

1. 为什么选择 Scrapy?

  • 高效的数据提取
    Scrapy 使用 Twisted 异步网络库来处理网络请求,这使得它能够以非常高效的方式同时处理多个请求。与其他同步爬虫框架相比,Scrapy 能够更快速地抓取大量数据。

  • 灵活的架构
    Scrapy 采用模块化设计,使得用户可以根据需求轻松扩展和自定义。无论是简单的数据提取任务还是复杂的分布式爬虫系统,Scrapy 都能胜任。

  • 丰富的社区支持
    Scrapy 拥有一个活跃的开发者社区和大量的扩展插件。用户可以利用现有的插件来增强爬虫的功能,而无需从头开始编写代码。

2. Scrapy 的核心组件

Scrapy 框架由多个组件构成,每个组件在数据提取过程中扮演着不同的角色。

  • Spiders
    Spider 是 Scrapy 中最基本的爬虫类,定义了如何从一个或多个网站抓取信息。用户需要继承 Scrapy 的 Spider 类并实现 parse 方法来定义抓取逻辑。

  • Item
    Item 是一种容器,用于存储从网页中提取的数据。类似于 Python 的字典,但提供了更多的验证和序列化功能。

  • Item Pipeline
    Item Pipeline 是处理和存储 Item 的一系列组件。用户可以在 Pipeline 中对提取的数据进行清洗、验证和持久化。

  • Downloader Middleware
    Downloader Middleware 是一组钩子,可以在 Scrapy 发出请求和接收响应时进行处理。用户可以通过中间件修改请求头、设置代理等。

  • Scheduler
    Scheduler 负责接收从引擎发来的请求,并将它们加入队列,以便后续调度。它确保每个请求都能被高效地处理,并支持请求优先级。

#3. 安装和创建项目

  • 安装 Scrapy
    在开始使用 Scrapy 之前,需要先安装它。可以使用以下命令安装 Scrapy:
pip install scrapy
  • 创建 Scrapy 项目
    安装完成后,可以通过以下命令创建一个新的 Scrapy 项目:
scrapy startproject myproject

这个命令会创建一个名为 myproject 的目录结构,其中包含 Scrapy 项目的基本文件。

4. 编写第一个 Spider

创建项目后,可以开始编写第一个 Spider。以下是一个简单的 Spider 示例,它从一个网站抓取标题信息。

import scrapy

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['http://example.com']

    def parse(self, response):
        for title in response.css('title::text'):
            yield {'title': title.get()}

将这个 Spider 保存为 myspider.py,然后在项目目录中运行以下命令启动爬虫:

scrapy crawl myspider

5. 数据处理和存储

提取的数据可以通过 Item Pipeline 进行处理和存储。以下是一个简单的 Pipeline 示例,它将数据保存到 JSON 文件中。

import json

class JsonWriterPipeline:

    def open_spider(self, spider):
        self.file = open('items.json', 'w')

    def close_spider(self, spider):
        self.file.close()

    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"
        self.file.write(line)
        return item

在 settings.py 中启用这个 Pipeline:

ITEM_PIPELINES = {
    'myproject.pipelines.JsonWriterPipeline': 300,
}

6. 高级功能

Scrapy 还支持许多高级功能,如分布式爬取、数据去重、自动处理Cookies、支持HTTP/2等。用户可以通过编写和配置中间件、扩展等来充分利用这些高级功能。

结论

Scrapy 是一个功能强大且灵活的爬虫框架,适用于从简单到复杂的各种数据提取任务。通过掌握 Scrapy 的核心组件和功能,用户可以高效地构建和维护爬虫项目,并从中获得大量有价值的数据。


原文地址:https://blog.csdn.net/qq_35240081/article/details/140251929

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!