python爬虫之scrapy框架介绍

news2024/11/24 6:42:49

一、Scrapy框架简介

Scrapy 是一个开源的 Python 库和框架,用于从网站上提取数据。它为自从网站爬取数据而设计,也可以用于数据挖掘和信息处理。Scrapy 可以从互联网上自动爬取数据,并将其存储在本地或在 Internet 上进行处理。Scrapy 的目标是提供更简单、更快速、更强大的方式来从网站上提取数据。

二、Scrapy的基本构成

Scrapy 框架由以下五个主要组件构成:

1. Spiders:它是 Scrapy 框架的核心部分,主要用于定义从网站上提取数据的方式。Spider 是一个 Python 类,它定义了如何从特定的网站抓取数据。

2. Items:它用于定义爬取的数据结构,Scrapy 将在爬取过程中自动创建 Item 对象,它们将被进一步处理,例如存储到数据库中。

3. Item Pipeline:它是 Scrapy 框架用于处理 Item 对象的机制。它可以执行诸如数据清洗、验证和存储等操作。

4. Downloader:它是 Scrapy 框架用于下载页面的组件之一。它正在处理网络请求,从互联网上下载页面并将其回传到 Spider 中。

5. Middleware:它是 Scrapy 框架用于处理 Spider、Downloader 和 Item Pipeline 之间交互的组件之一。中间件在这个架构中扮演了一个交换件角色,可以添加、修改或删除请求、响应和 Item 对象。

三、Scrapy框架的运行流程

Scrapy 的运行流程可以分为以下几步:

1. 下载调度器:Scrapy 框架接收 URL 并将其传递给下载调度器。下载调度器负责队列管理和针对每个 URL 的下载请求的优先级。它还可以控制并发请求的总数,从而避免对服务器的过度负载。

2. 下载器:下载器使用 HTTP 请求从互联网上下载 HTML 或其他类型的页面内容。下载器可以通过中间件拦截处理、修改或过滤请求和响应。下载器还可以将下载的数据逐步传递到爬虫中。

3. 爬虫:Spider 接收下载器提供的页面数据,并从中提取有用的信息。Spider 可以通过规则来定义如何从页面中提取数据。Spider 可以将提取的数据传递给 Item Pipeline 进行处理。

4. Item Pipeline:Item Pipeline 进行数据的清洗、验证和存储等操作。它还可以将数据存储到数据库、JSON 或 CSV 文件中。

5. 输出:Scrapy 可以输出爬取的数据到命令行、文件或 JSON 格式。输出可以用于生成各种类型的报告或分析。

四、Scrapy框架的使用

下面我们将介绍如何使用 Scrapy 框架。

1. 安装 Scrapy

Scrapy 框架可以通过 pip 安装。使用以下命令安装 Scrapy:


pip install scrapy
2. 创建 Scrapy 项目

使用以下命令创建 Scrapy 项目:


scrapy startproject project_name

其中,project_name 是项目的名称。

3. 创建 Spider

使用以下命令创建 Spider:

scrapy genspider spider_name domain_name

其中,spider_name 是 Spider 的名称,domain_name 是要爬取的域名。

在 Spider 中,我们可以定义如何从网站上提取数据。下面是一个简单的 Spider 的示例:

import scrapy

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

    def parse(self, response):
        # 提取数据的代码
        pass

在这个示例中,我们定义了一个 Spider,并指定了它的名称和要爬取的 URL。我们还实现了一个 parse 方法,用于提取页面上的数据。

4. 创建 Item

在 Scrapy 中,我们可以定义自己的数据结构,称为 Item。我们可以使用 Item 类来定义数据结构。下面是一个 Item 的示例:

import scrapy

class MyItem(scrapy.Item):
    title = scrapy.Field()
    author = scrapy.Field()
    content = scrapy.Field()

在这个示例中,我们定义了一个 Item,并定义了三个字段:title、author 和 content。

5. 创建 Item Pipeline

在 Scrapy 中,我们可以定义 Item Pipeline 来处理 Item 对象。Item Pipeline 可以执行以下操作:

  • 清洗 Item 数据
  • 验证 Item 数据
  • 存储 Item 数据

下面是一个简单的 Item Pipeline 的示例:

class MyItemPipeline(object):
    def process_item(self, item, spider):
        # 处理 Item 的代码
        return item

在这个示例中,我们定义了一个 Item Pipeline,并实现了 process_item 方法。

6. 配置 Scrapy

Scrapy 有几个重要的配置选项。其中,最常见的是 settings.py 文件中的选项。下面是一个 settings.py 文件的示例:

BOT_NAME = 'mybot'
SPIDER_MODULES = ['mybot.spiders']
NEWSPIDER_MODULE = 'mybot.spiders'

ROBOTSTXT_OBEY = True

DOWNLOADER_MIDDLEWARES = {
    'mybot.middlewares.MyCustomDownloaderMiddleware': 543,
}

ITEM_PIPELINES = {
    'mybot.pipelines.MyCustomItemPipeline': 300,
}

在这个示例中,我们定义了一些重要的选项,包括 BOT_NAME、SPIDER_MODULES、NEWSPIDER_MODULE、ROBOTSTXT_OBEY、DOWNLOADER_MIDDLEWARES 和 ITEM_PIPELINES。

7. 运行 Scrapy

使用以下命令运行 Scrapy:

scrapy crawl spider_name

其中,spider_name 是要运行的 Spider 的名称。

五、Scrapy框架的案例

下面我们来实现一个简单的 Scrapy 框架的案例。

1. 创建 Scrapy 项目

使用以下命令创建 Scrapy 项目:

scrapy startproject quotes

我们将项目名称设置为 quotes。

2. 创建 Spider

使用以下命令创建 Spider:

scrapy genspider quotes_spider quotes.toscrape.com

其中,quotes_spider 是 Spider 的名称,quotes.toscrape.com 是要爬取的域名。

在 Spider 中,我们定义如何从网站上提取数据。下面是一个 quotes_spider.py 文件的示例:

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):
        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)

在这个示例中,我们定义了一个 Spider,并指定了它的名称。我们还实现了 start_requests 方法,用于定义要爬取的 URL。我们还实现了一个 parse 方法,用于提取页面上的所有引用。我们使用 response.css 方法选择要提取的元素,并使用 yield 语句返回一个字典对象。

3. 运行 Spider

使用以下命令运行 Spider:

scrapy crawl quotes

这个示例将下载 quotes.toscrape.com 网站上的页面,并从中提取所有引用。它将引用的文本、作者和标签存储到 MongoDB 数据库中。

六、总结

Scrapy 是一个功能强大的 Python 库和框架,用于从网站上提取数据。它为自从网站爬取数据而设计,也可以用于数据挖掘和信息处理。Scrapy 的目标是提供更简单、更快速、更强大的方式来从网站上提取数据。Scrapy 框架由 Spiders、Items、Item Pipeline、Downloader 和 Middleware 等组件构成,并具有可定制和可扩展性强的特性。使用 Scrapy 框架可以大大减少开发人员在网络爬虫开发中的时间和精力,是一个非常优秀的爬虫框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ffmpeg+nginx实现rtsp协议摄像头web端播放

ffmpegnginx实现rtsp协议摄像头web端播放 环境准备准备nginx环境添加rtmp模块添加hls转发 使用ffmpeg,将摄像头rtsp转为rtmp并推送到nginxVLC播放验证 环境准备 nginx(需要安装rtmp模块)ffmpeg 6.0vlc播放器(本地播放验证&#x…

这个酒店管理方法太酷了!赶紧试试吧

安全是酒店管理中最重要的优先事项之一,酒店保障住客和员工的生命安全是不可妥协的责任。为了有效预防和应对潜在的火灾风险,引入烟感监控系统是一种普遍且高效的解决方案。 烟感监控系统通过及时检测烟雾和火源,及时发出警报和采取措施&…

Nacos单点部署

文章目录 一、Nacos概述二、部署Nacos(1)容器部署 三、注册服务四、整合外部的Mysql(单节点) 一、Nacos概述 Nacos是什么? Nacos的全称是Dynamic Naming and Configuration Service,是阿里巴巴推出来的一个…

系统函数和状态方程的转换

1.问题介绍 之前碰到这样一个问题:给定一个正弦信号以及系统传递函数,利用该系统传递函数进行卡尔曼滤波。 利用卡尔曼进行滤波首先要知道系统的状态方程,那么题目只给了系统传递函数,如何能够得到状态方程呢? 首先…

C++ 多线程:std::future

std::future std::future 简介示例1博客引用来源 std::future 简介 我们前面介绍的std::thread 是C11中提供异步创建多线程的工具,只能是异步运行任务,却无法获取任务执行的结果,一般都是依靠全局对象,全局对象在多线程下是及其不…

Python连接Hive实例教程

一 Python连接hive环境实例 经在网络查询相关的教程,发现有好多的例子,发现连接底层用的的驱动基本都是pyhive和pyhs2两种第三方库的来连接的 hive,下面将简介windows 10 python 3.10 连接hive的驱动程序方式,开发工具:pycharm …

API接口统一管理

API接口统一管理 在开发项目的时候,接口可能很多需要统一管理。在src目录下去创建api文件夹去统一管理项目的接口;这样便于后期维护和团队开发。 axios二次封装 对于axios不熟悉的话,建议先学习这篇文章:Axios的基本使用 在开发项目的时候避免不了与后…

日销千单!TikTok Shop正成为部分东南亚卖家的首选平台...

TikTok Shop 正在成为一些东南亚卖家首选的电商平台,凭借娱乐购物模式获得年轻消费者青睐,他们已经可以通过该平台实现日销 5000 单。 作为字节跳动旗下全球短视频平台,TikTok 的电商功能可能会撼动这个拥有 6.7 亿人口、目前由 Shopee、Laz…

[Docker实现测试部署CI/CD----构建成功后钉钉告警(7)]

目录 15、钉钉告警创建项目群,然后添加机器人添加机器人Jenkins 系统配置项目配置修改Jenkinsfile文件,添加钉钉提示信息测试 不修改Jenkinsfile文件,添加钉钉提示信息测试 15、钉钉告警 创建项目群,然后添加机器人 首先需要在钉…

探索Python数据容器之乐趣:列表与元组的奇妙旅程!

文章目录 零 数据容器入门一 数据容器:list(列表)1.1 列表的定义1.2 列表的下表索引1.3 列表的常用操作1.3.1 列表的查询功能1.3.2 列表的修改功能1.3.3 列表常用方法总结 1.4 补充:append与extend对比1.5 list(列表)的遍历1.6 补…

浏览器同源策略

浏览器同源策略 同源策略:是一个重要的浏览器的安全策略,用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互 它能帮助阻隔恶意文档,减少可能被攻击的媒介 例如:被钓鱼网站收集信息,使用ajax发起…

MongoDB 入门

1.1 数据库管理系统 在了解MongoDB之前需要先了解先数据库管理系统 1.1.1 什么是数据? 数据(英语:data),是指未经过处理的原始记录。 一般而言,数据缺乏组织及分类,无法明确的表达事物代表的意…

基于IMU和超声的3D手势识别笔

随着科技的发展,人机交互在商业中有了越来越多的应用。面对日益复杂的交互场景,手势识别逐渐成为虚拟现实等相关应用的主要交互手段。 3D手势识别是一个具有挑战性的问题,常用的手势传感器有三种基本类型:多点触摸屏传感器、基于视…

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。 神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…

FineBI 人力资源 专题

此处使用FineBI处理人力资源数据,数据来源于HR_database数据文件,将此文件拷贝到安装目录下 然后配置数据库连接 在【公共数据】中新建一个文件夹,并将之前数据库中需要用到的表放入此处,更新数据。显示如下。 这时候首先要建立…

汽配企业如何利用MES管理系统解决生产防错难题

汽车配件制造业是一个高效率、低成本、高质量的生产领域,但同时也面临着一系列的挑战。其中最为突出的挑战之一是如何在生产过程中避免错误,提高产品的合格率。本文将介绍汽车配件的制造特点以及如何通过MES管理系统解决方案实现生产防错,从而…

企业如何实现自己的AI垂直大模型

文章目录 为什么要训练垂直大模型训练垂直大模型有许多潜在的好处训练垂直大模型也存在一些挑战 企业如何实现自己的AI垂直大模型1.确定需求2.收集数据3.准备数据4.训练模型5.评估模型6.部署模型 如何高效实现垂直大模型 ✍创作者:全栈弄潮儿 🏡 个人主页…

【C++11】右值引用 | 移动语义

文章目录 一.基本概念1.左值 && 右值2.左值引用 && 右值引用 二.右值引用使用场景和意义1.左值引用的使用场景2.左值引用的短板3.右值引用和移动语义4.右值引用引用左值5.右值引用的其他使用场景 三.完美转发1.万能引用2.完美转发保持值的属性3.完美转发的使用…

LeetCode 热题 100 JavaScript--141. 环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

Linux知识点 -- 进程间通信(二)

Linux知识点 – 进程间通信(二) 文章目录 Linux知识点 -- 进程间通信(二)一、System V共享内存1.原理2.申请共享内存3.System V共享内存的使用4.为共享内存添加访问控制 二、信号量(概念理解)1.概念2.信号量…