Python 爬虫入门(八):爬虫工程化及Scrapy简介「详细介绍」

news2024/11/16 12:34:39

Python 爬虫入门(八):爬虫工程化及Scrapy简介「详细介绍」

  • 前言
  • 1. Python
    • 1.1 Python 简介
    • 1.2 Python 爬虫的优势
    • 1.3 必须掌握的 Python 基础知识
      • 1.3.1 基本语法
      • 1.3.2. 函数和模块
      • 1.3.3 文件操作
      • 1.3.4 数据处理
      • 1.3.5 类和对象
      • 1.3.6 异常处理
  • 2. Scrapy
    • 2.1 Scrapy 简介
    • 2.2 Scrapy 的特点
    • 2.3 Scrapy 的工作流程
  • 3. Scrapy 的核心组件
    • 3.1 Spider
    • 3.2 Item
    • 3.3 Item Pipeline
    • 3.4 Selector
    • 3.5 Downloader Middleware
    • 3.6 Scheduler
    • 3.7 Engine

前言

欢迎来到“Python 爬虫入门”系列的第八篇文章。本篇文章将系统地介绍如何通过 Scrapy 框架将爬虫工程化,从 Python 与爬虫的关系讲起,详细阐述 Scrapy 框架的工作流程。

1. Python

1.1 Python 简介

Python 是一种高级编程语言,以其简洁的语法和强大的功能而闻名。Python 在数据处理、人工智能、自动化脚本等领域有着广泛的应用。特别是对于爬虫开发,Python 拥有丰富的库和框架,使得爬虫开发变得更加容易。

1.2 Python 爬虫的优势

  1. 简洁易用:Python 语法简洁,容易上手,非常适合快速开发和原型设计。
  2. 丰富的库和框架:Python 拥有如 requests、BeautifulSoup、Scrapy 等众多库和框架,大大简化了爬虫开发的工作。
  3. 强大的社区支持:Python 拥有庞大的开发者社区,遇到问题时可以很容易找到解决方案。

1.3 必须掌握的 Python 基础知识

1.3.1 基本语法

  • 数据类型

    # 整数
    num = 10
    # 浮点数
    pi = 3.14
    # 字符串
    greeting = "Hello, World!"
    # 列表
    fruits = ["apple", "banana", "cherry"]
    # 元组
    coordinates = (10.0, 20.0)
    # 字典
    person = {"name": "Alice", "age": 30}
    # 集合
    unique_numbers = {1, 2, 3, 4}
    
  • 控制结构

    # if 语句
    if num > 0:
        print("Positive number")
    else:
        print("Non-positive number")
    
    # for 循环
    for fruit in fruits:
        print(fruit)
    
    # while 循环
    count = 0
    while count < 3:
        print(count)
        count += 1
    
    # 异常处理
    try:
        result = 10 / 0
    except ZeroDivisionError:
        print("Cannot divide by zero")
    finally:
        print("Execution complete")
    

1.3.2. 函数和模块

  • 函数定义和调用

    def greet(name):
        return f"Hello, {name}!"
    
    message = greet("Bob")
    print(message)
    
  • 模块和包

    # 导入标准库模块
    import math
    print(math.sqrt(16))
    
    # 使用自定义模块
    # my_module.py 文件内容
    def add(a, b):
        return a + b
    
    # main.py 文件内容
    import my_module
    result = my_module.add(5, 3)
    print(result)
    

1.3.3 文件操作

  • 文件读写

    # 写入文件
    with open("example.txt", "w") as file:
        file.write("Hello, File!")
    
    # 读取文件
    with open("example.txt", "r") as file:
        content = file.read()
        print(content)
    
  • 文件路径操作

    from pathlib import Path
    
    # 创建路径对象
    path = Path("example.txt")
    # 获取文件名
    print(path.name)
    # 获取文件扩展名
    print(path.suffix)
    

1.3.4 数据处理

  • 字符串操作

    text = "  Hello, World!  "
    # 去除空白
    stripped_text = text.strip()
    print(stripped_text)
    
    # 字符串分割
    words = stripped_text.split(", ")
    print(words)
    
  • 正则表达式

    import re
    
    pattern = r"\d+"  # 匹配数字
    text = "The year is 2024"
    matches = re.findall(pattern, text)
    print(matches)
    

1.3.5 类和对象

  • 面向对象编程
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def greet(self):
            return f"Hello, my name is {self.name} and I am {self.age} years old."
    
    person = Person("Alice", 30)
    print(person.greet())
    

1.3.6 异常处理

  • 错误捕获
    try:
        with open("nonexistent_file.txt", "r") as file:
            content = file.read()
    except FileNotFoundError:
        print("File not found")
    except Exception as e:
        print(f"An error occurred: {e}")
    

2. Scrapy

2.1 Scrapy 简介

  • Scrapy 是一个用于提取网页数据的快速、高效的爬虫框架。它提供了强大的功能和灵活的配置,使得爬虫开发更加系统化和工程化。

  • Scrapy 的设计理念是将爬虫任务拆分成若干独立的组件,每个组件负责不同的任务,通过管道将这些组件连接起来,完成整个爬虫任务。

2.2 Scrapy 的特点

  1. 模块化设计:Scrapy 将爬虫任务分解成多个独立的模块,每个模块负责特定的任务,如请求调度、数据提取、数据存储等。
  2. 高效的异步处理:Scrapy 使用 Twisted 框架实现异步网络请求,提高了爬虫的效率和速度。
  3. 强大的数据提取:Scrapy 提供了强大的选择器(如 XPath、CSS 选择器),方便从网页中提取所需数据。
  4. 灵活的配置:Scrapy 支持多种配置方式,可以根据需求灵活调整爬虫的行为。

2.3 Scrapy 的工作流程

在这里插入图片描述

  1. Requests (请求)
    爬虫(Spider)生成初始的请求(Requests)并将其提交给引擎(Engine)。 这些请求包括需要爬取的 URL 以及如何处理响应(Response)的回调函数。

  2. Scheduler (调度器)
    引擎将请求传递给调度器(Scheduler)。
    调度器负责管理这些请求,并按优先级将其排列,等待处理。

  3. Requests (请求)
    调度器将请求交回给引擎,按顺序处理。

  4. Downloader Middleware (下载中间件)
    请求经过下载中间件(Downloader Middleware)进行预处理。
    下载中间件可以在请求发送前添加、修改请求头等操作。

  5. Downloader (下载器)
    引擎将请求发送给下载器(Downloader),下载器负责向目标网站发送 HTTP 请求并获取响应。 下载器将响应返回给引擎。

  6. Response (响应)
    响应经过下载中间件进行后处理,然后返回给引擎。 引擎将响应发送给爬虫进行处理。

  7. Spiders (爬虫)
    爬虫接收到响应后,使用预先定义的回调函数解析响应,提取数据或生成新的请求。 解析后的数据可以直接生成 Items,新的请求会返回给引擎继续处理。

  8. Item Pipelines (项目管道)
    爬虫生成的 Items 通过引擎传递给项目管道(Item Pipelines)。 项目管道负责处理、清洗、验证、存储这些 Items。

3. Scrapy 的核心组件

在深入学习如何使用 Scrapy 之前,我们先了解一下 Scrapy 的核心组件。

3.1 Spider

Spider 是 Scrapy 中最核心的组件,负责定义爬取逻辑和数据提取规则。每个 Spider 都是一个独立的类,继承自 scrapy.Spider,并实现一些关键的方法,如 start_requestsparse

3.2 Item

Item 是用来定义抓取的数据结构的类。它类似于数据库中的表结构,用于存储爬取到的数据。

3.3 Item Pipeline

Item Pipeline 用于处理和存储抓取到的数据。它是一个独立的模块,负责对 Item 进行处理,例如清洗数据、验证数据和将数据存储到数据库中。

3.4 Selector

Selector 是 Scrapy 提供的数据提取工具,用于从 HTML 或 XML 文档中提取数据。Selector 支持 XPath 和 CSS 选择器两种方式。

3.5 Downloader Middleware

Downloader Middleware 是 Scrapy 中用于处理请求和响应的中间件。它可以在请求发送之前和响应到达之后进行处理,例如添加请求头、处理重定向等。

3.6 Scheduler

Scheduler 是 Scrapy 中用于管理请求队列的组件。它负责将请求添加到队列中,并按照一定的顺序发送请求。

3.7 Engine

Engine 是 Scrapy 的核心引擎,负责协调 Spider、Scheduler、Downloader 和 Item Pipeline 之间的工作流。

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

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

相关文章

CAP+RabbitMQ

CAP&#xff08;C# APM for Microservices&#xff09;是一个开源的C#库&#xff0c;用于在分布式系统&#xff08;如SOA或微服务系统&#xff09;中实现事件总线及最终一致性&#xff08;分布式事务&#xff09;。CAP提供了多种消息队列&#xff08;MQ&#xff09;实现的支持&…

手把手教你写一个图形化的端口扫描工具

前言 关于学习群 由于我使用masscan进行纯端口扫描的时候&#xff0c;遇到扫描不出结果的情况&#xff0c;我就考虑了自己写一个端口扫描脚本&#xff0c;还挺好用。 库介绍 1、asyncio asyncio 是 Python 的一个库&#xff0c;用于编写单线程并发代码。使用 asyncio&#…

MacBook2024非常出色的虚拟机软件Parallels Desktop19.3中文免费版本

最近我被问得最多的一个问题就是&#xff1a;能不能在一台设备上同时使用Windows系统和macOS系统&#xff1f;答案当然是肯定的&#xff0c;你只需要一款虚拟机软件就能轻松实现。今天&#xff0c;我就来为大家安利一款非常出色的虚拟机软件——Parallels Desktop19。 这款软件…

【C++】模拟实现queue

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:实战项目集 ⚙️操作环境:Visual Studio 2022 ​​ 一.了解项目功能 &#x1f4cc;了解queue官方标准 在本次项目中我们的目标是模拟实现一个queue,先一起看一下C标准文档中queue的定义:cplusplus : C queue标准文档htt…

中英文字翻译,这几款软件值得收藏!

在这个全球化的时代&#xff0c;语言不再是沟通的障碍&#xff0c;而翻译软件则成为了我们跨越语言鸿沟的得力助手。今天&#xff0c;就让我们一起探索三款让英文翻译变得前所未有的简单与高效的神奇软件&#xff0c;无论是学习、工作还是旅行&#xff0c;它们都能成为你不可或…

kickstart无人值守以及pxe实现服务器自动部署

使用背景 在企业中安装多台操作系统时会面临的问题&#xff1a;当安装Linux操作系统时&#xff0c;安装过程会需要回答很多关于设定的问题 这些问题必须手动选择&#xff0c;否则无法进行安装 。当只安装1台Linux系统&#xff0c;手动选择设定工作量比较轻松 当安装多台Linux&a…

PSO_GA混合算法优化PID参数(附代码)

由于PSO算法本身的缺陷,其存在容易出现早熟收敛、后期迭代效率不高、搜索精度不高的问题,在线性递减惯性权重PSO算法的基础上,与GA遗传算法相结合,针对PSO易陷入局部最优,通过采用GA杂交变异的思想,增加了粒子的多样性,跳出局部最优,增强混合算法的全局搜索能力,提高搜…

完美解决pip命令版本冲突导致对应版本模块包无法安装的问题

解决步骤 使用pip更新/降低指定模块包命令格式降低pip自身至指定版本的命令再次换源安装指定模块包 在对 FasterNet 这篇论文源码复现过程中&#xff0c;我们首先需要安装相关依赖文件&#xff08; path/to/your/requirements.txt&#xff09; -extra-index-url https://down…

CentOS7 VMware虚拟机基于NAT配置网络IP

目录 前言 VMnet8 虚拟网络编辑 ens33 ping 防火墙 前言 平时学习时一直需要用到Linux服务器&#xff0c;一般都是在Windows上安装VMware来创建一个虚拟机。创建的虚拟机需要配置网络才能够访问外网&#xff0c;可以通过以下两种方式来配置虚拟机网络 桥接模式NAT模式&…

给儿童掏耳朵用什么工具好?TOP4机型实测数据大公开

作为一名专业的个护测评师&#xff0c;我深知宝宝掏耳朵是一件多难的事情&#xff0c;由于宝宝的耳朵属于盲区。在为他操作时&#xff0c;很容易伤及宝宝的耳膜。因此&#xff0c;帮宝宝掏耳朵时工具的选择非常的重要。然而市场上许多跨界大牌存在隐患。某些网红品牌&#xff0…

视频发光字体特效怎么做 会声会影字体怎么淡化退出 视频剪辑制作教程

视频字体样式在视频制作中起着重要的作用&#xff0c;它可以帮助传达信息、增强视觉吸引力、提供情感表达、强调关键信息和提供文化背景解读等。这篇文章以会声会影为例&#xff0c;来一起看看发光字体制作&#xff0c;字体怎么淡化退出等内容。 你可以在这里免费下载会声会影…

Spring-Kafka确认机制报错:No Acknowledgment available as an argument

问题出现 在spring boot集成kafka时报错&#xff0c;报错信息&#xff1a; No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment.翻译&#xff1a; Acknowledgment 参数不可用&#xff0c;监听…

thingsboard-3.6.4 源码编译运行

1.首先我们要检查我们所需要的环境是否全部安装&#xff0c;还有对应的版本&#xff0c;一定要按照项目要求的版本来&#xff0c;要不然你会给自己挖很多坑。 我们使用的是3.6.4的版本&#xff0c;下面的版本全是基于这个版本的。需要安装好已经配置环境变量。 这部分大家就自…

adaboost提升方法

集成学习&#xff1a;串联&#xff08;提升方法&#xff09;&#xff0c;并联&#xff08;随机森林&#xff09; Adaboost&#xff1a;分类加法模型&#xff08;更新样本权值&#xff0c;投票权值-由权值误差率决定&#xff09; 提升树&#xff1a;回归加法模型 &#xff08;…

Linux驱动开发—平台总线模型详解

文章目录 1.平台总线介绍1.1平台总线模型的组成部分1.2平台总线模型的优势 2.使用平台总线模型开发驱动2.1注册platform设备2.2注册platform驱动2.3效果演示 1.平台总线介绍 Linux 平台总线模型&#xff08;Platform Bus Model&#xff09;是一种设备驱动框架&#xff0c;用于…

软件测试老兵的十条生存法则

在当下的数字化时代&#xff0c;软件测试行业正经历快速的变革和发展。自动化测试、持续集成和持续交付&#xff08;CI/CD&#xff09;、人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;、云计算和DevOps等技术正在重塑软件测试的各个方面。这些变化不…

全国产Gpixel图像传感器+FPGA+AI高帧率机器视觉工业相机解决方案

近些年来&#xff0c;机器视觉广泛应用于智能制造、自动化等设备中&#xff0c;用来保证产品质量&#xff0c;控制生产流程&#xff0c;感知环境等。面对不同的应用场景&#xff0c;检测系统需要满足不同的技术指标。其中图像传感器的分辨率和帧率是两个极为重要的指标&#xf…

2023级JavaScript与jQuery

第一课&#xff1a;JavaScript概述 一.预习笔记 1.认识JavaScript 1-1&#xff1a;1995年&#xff0c;NetScape公司与Sun公司联合开发出JavaScript脚本语言 1-2&#xff1a;JavaScript的作用 1&#xff09;客户端表单验证 2&#xff09;页面动态效果 3&#xff09;动态改…

[米联客-安路飞龙DR1-FPSOC] UDP通信篇连载-03 IP_ARP层程序设计

软件版本&#xff1a;Anlogic -TD5.9.1-DR1_ES1.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用安路(Anlogic)FPGA 实验平台&#xff1a;米联客-MLK-L1-CZ06-DR1M90G开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 ht…

基于Golang实现Kubernetes边车模式

本文介绍了如何基于 Go 语言实现 Kubernetes Sidecar 模式&#xff0c;并通过实际示例演示创建 Golang 实现的微服务服务、Docker 容器化以及在 Kubernetes 上的部署和管理。原文: Sidecar Pattern with Kubernetes and Go[1] 在这篇文章中&#xff0c;我们会介绍 Sidecar 模式…