详解Python的爬虫框架 Scrapy

详解Python的爬虫框架 Scrapy

什么是Scrapy

Scrapy是一个用于爬取Web站点并提取结构化数据的应用程序框架。它基于Twisted框架构建,并提供了数据结构和XML(and JSON,CSV等数据格式)导入/导出的支持。

使用Scrapy,可以轻松地创建爬取任务,然后分析和保存数据以在后续分析中使用。

Scrapy的组成部分

Spider

Spider是Scrapy的核心组件之一。它是一个爬虫的实现,通过设置规则可以定义某个网站的页面如何被爬取。基本上,Spider会从一些初始URL开始,通过跟踪页面中链接(例如,首页链接,类别链接和文章链接等)并根据您定义的规则准确提取数据。

Item

Item是爬取结果的容器。它可以是特定于站点的自定义类或简单的字典。爬虫通过交付Item到Item Pipeline,后者把Item处理并集成到整个系统中。

Item Pipeline

Item Pipeline负责处理从Spider获取的Item,并将其保存到任何地方(例如,数据库,文件系统等)。Item Pipeline是一个可选的组件,因此您无需使用它。

Downloader

下载器是Scrapy另一个核心组件。它负责根据请求(通常是从Spider生成)下载相应的页面并返回响应。默认情况下,Scrapy使用Twisted提供的异步网络库。这使得Scrapy的下载器能够同时处理数百个下载。

Middleware

Middleware提供了从Spider生成的请求和从Downloader返回的响应的钩子。这使得在处理请求和响应时可以插入自己的自定义代码,例如为请求添加头文件,向响应添加元数据等。

Scheduler

Scheduler维护了将要访问的URL队列。当Spider发送请求时,它首先进入调度程序队列并被检查是否可以进行抓取。调度程序还负责避免重复请求的任务。

Engine

Engine管理上述所有组件之间的工作流程。它从Spider接收请求并传递给中间件,Downloader和Scheduler。而后,Engine从Downloader同道返回的响应并将响应交付给Spider,进行进一步处理。

Scrapy的使用

安装Scrapy

Scrapy是通过pip进行安装的。要安装Scrapy,运行以下命令:

pip install scrapy

创建Scrapy项目

要创建Scrapy项目,请运行以下命令:

scrapy startproject myproject

上面的命令将在当前目录下创建一个名为myproject的Scrapy项目,其中包含必要的文件结构。要了解Scrapy项目中不同文件的含义,请参阅官方文档。

创建Spider

要创建Spider,请创建一个新的Python文件并定义一个继承自scrapy.Spider的类。例如,以下示例Spider将爬取目标站点的主页,并提取有关所有文章(包括标题,链接和发布日期)的信息:

import scrapy


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

    def parse(self, response):
        for article in response.css('article'):
            yield {
                'title': article.css('h2 a::text').get(),
                'link': article.css('h2 a::attr(href)').get(),
                'publish_date': article.css('p.published::text').get(),
            }

运行Spider

要运行您的Spider,请在项目的根文件夹中运行以下命令:

scrapy crawl myspider

这将运行名为myspider的Spider并开始提取数据。

示例一:爬取博客

以下代码演示了如何使用Scrapy爬取一些博客的标题和链接。要实现此操作,请按以下步骤操作:

定义Spider

import scrapy


class BlogSpider(scrapy.Spider):
    name = 'blogspider'
    start_urls = ['https://blog.scrapinghub.com']

    def parse(self, response):
        for title in response.css('.post-header>h2'):
            yield {'title': title.css('a ::text').get()}

        for next_page in response.css('a.next-posts-link'):
            yield response.follow(next_page, self.parse)

运行Spider

要运行上述程序,请在终端中键入以下内容:

scrapy runspider blog_spider.py -o output.json

在上面的命令中,-o output.json将指示Scrapy将爬虫输出转储到名为output.json的文件中。

输出将类似于以下内容:

[{"title": "Scrapy Tips from the Pros: June 2016"}]

示例二:使用Scrapy和BeautifulSoup爬取网页并提取数据

在这个例子中,我们将使用Scrapy来爬取一个网站,并使用BeautifulSoup从响应中提取数据。执行以下步骤:

安装BeautifulSoup

使用以下命令安装BeautifulSoup:

pip install beautifulsoup4

创建Spider

import scrapy
from bs4 import BeautifulSoup


class QuotesSpider(scrapy.Spider):
    name = "sina_spider"
    start_urls = [
        'https://news.sina.com.cn/',
    ]

    def parse(self, response):
        soup = BeautifulSoup(response.text, 'html.parser')
        for a in soup.select('a[href^="http"]'):
            yield response.follow(a['href'], self.parse_item)

    def parse_item(self, response):
        soup = BeautifulSoup(response.text, 'html.parser')
        title = soup.title.string
        article = soup.select_one('article')
        content = article.get_text(strip=True)
        yield {'title': title, 'content': content}

运行Spider

要运行该Spider,请执行以下命令:

scrapy runspider sina_spider.py -o output.json

上述命令将导出提取的文章标题和内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python的爬虫框架 Scrapy - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 教你利用PyTorch实现sin函数模拟

    教你利用PyTorch实现sin函数模拟 简介 PyTorch是一个基于Python的科学计算库,它有以下特点: 支持GPU加速计算 动态计算图 支持自动求导 方便的构建神经网络 在本文中,我们将使用PyTorch来实现sin函数的模拟。具体来说,我们将使用PyTorch来构建一个神经网络,并使用该神经网络来拟合sin函数。 准备工作 在开始本教程之前,需要…

    人工智能概论 2023年5月25日
    00
  • OpenCV之理解KNN邻近算法k-Nearest Neighbour

    OpenCV之理解KNN邻近算法k-Nearest Neighbour 什么是KNN算法 KNN(k-Nearest Neighbour)是一种无监督学习中的非参数模型,即不对数据的整体分布做出任何假设。该算法的主要思路是:对于一个未知样本,把它的特征向量与训练集中所有特征向量进行比较,找到与其特征最相似的k个样本,并把该样本归为最相似的k个样本所代表的类别…

    人工智能概论 2023年5月25日
    00
  • 使用OpenCV实现人脸图像卡通化的示例代码

    使用OpenCV实现人脸图像卡通化的示例代码的实现过程可以分为以下几个步骤: 1. 加载图片 我们首先需要加载图片作为我们要卡通化的对象。通过OpenCV的cv2.imread()函数,我们可以很方便地从磁盘中加载图片,例如: import cv2 # 加载图片 img = cv2.imread("path_to_image") 2. 灰…

    人工智能概论 2023年5月25日
    00
  • django验证系统的具体使用

    让我来为您讲解一下 Django 验证系统的具体使用,首先我们需要了解 Django 验证系统的基本概念和分类。 Django 验证系统的概述 Django 中的验证系统可以分为两类: Form 验证,对于表单数据的验证。Form 验证通过 Django Form 对象实现。 Model 验证,对于 Model 数据的验证。 Model 验证通过 Djang…

    人工智能概览 2023年5月25日
    00
  • Django 设置admin后台表和App(应用)为中文名的操作方法

    Django 是一个非常流行的 Python Web 框架,其中自带的 admin 后台管理系统可以帮助我们快速构建一个管理数据的页面。本篇攻略将会介绍如何设置 Django admin 后台表和 App(应用)为中文名。 1. 为 Admin 后台表设置中文名 我们可以继承 Django 自带的 ModelAdmin 类来对 admin 后台表进行定制。在…

    人工智能概论 2023年5月25日
    00
  • 商业效率

    商业效率攻略 商业效率是指企业在执行业务中,通过节约成本,提高效率,达到利润最大化的目标。下面是一些商业效率的攻略: 1. 流程优化 详细规划流程和标准操作程序 利用信息化技术简化流程 减少流程重复、缩短执行时间 审核流程精简、提升效率 示例1:某电商采购流程优化 针对采购流程,制定详细的标准操作程序;采用采购管理系统,整合供应商信息和产品信息库,实时掌握库…

    人工智能概论 2023年5月25日
    00
  • Rabbitmq延迟队列实现定时任务的方法

    下面是详细讲解“Rabbitmq延迟队列实现定时任务的方法”的完整攻略。 一、Rabbitmq延迟队列简介 Rabbitmq延迟队列,也叫死信队列(Dead Letter Exchange),是Rabbitmq提供的一个重要功能。它可以用于延迟一些任务的执行,或者将超时未处理的消息转移到其他队列中等。 二、实现方法 1.创建延迟队列 首先需要创建一个延迟队列…

    人工智能概览 2023年5月25日
    00
  • Python Django模型详解

    Python Django是一个流行的Web框架,在Web应用程序的构建中扮演着至关重要的角色,支持快速开发高度可伸缩和高度安全的Web应用程序。其中Django的模型,负责管理应用程序的数据,并粘合后端数据源。因此,在构建Django应用程序的过程中,深入理解Django模型是非常重要的。 Django模型的作用 Django模型作为ORM对象关系映射的一…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部