Python爬虫进阶:使用Scrapy库进行数据提取和处理

news/2024/7/19 11:18:50 标签: python, 爬虫, scrapy

在我们的初级教程中,我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中,我们将深入了解Scrapy的强大功能,学习如何使用Scrapy提取和处理数据。

一、数据提取:Selectors和Item

在Scrapy中,提取数据主要通过Selectors来完成。Selectors基于XPath或CSS表达式的查询语言来选取HTML文档中的元素。你可以在你的爬虫中使用response对象的xpathcss方法来创建一个Selector对象。

例如,我们可以修改我们的QuotesSpider爬虫,使用Selectors来提取每个引用的文本和作者:

python">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'):
            text = quote.css('span.text::text').get()
            author = quote.css('span small::text').get()
            print(f'Text: {text}, Author: {author}')

此外,Scrapy还提供了Item类,可以定义你想要收集的数据结构。Item类非常适合收集结构化数据,如我们从quotes.toscrape.com中获取的引用:

python">import scrapy

class QuoteItem(scrapy.Item):
    text = scrapy.Field()
    author = scrapy.Field()

然后我们可以修改QuotesSpider爬虫,使其生成和收集QuoteItem对象:

python">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'):
            item = QuoteItem()
            item['text'] = quote.css('span.text::text').get()
            item['author'] = quote.css('span small::text').get()
            yield item

二、数据处理:Pipelines

Scrapy使用数据管道(pipelines)来处理爬虫从网页中抓取的Item。当爬虫生成一个Item,它将被发送到Item Pipeline进行处理。

Item Pipeline是一些按照执行顺序排列的类,每个类都是一个数据处理单元。每个Item Pipeline组件都是一个Python类,必须实现一个process_item方法。这个方法必须返回一个Item对象,或者抛出DropItem异常,被丢弃的item将不会被之后的pipeline组件所处理。

例如,我们可以添加一个Pipeline,将收集的引用保存到JSON文件中:

python">import json

class JsonWriterPipeline(object):

    def open_spider(self, spider):
        self.file = open('quotes.jl', '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:

python">ITEM_PIPELINES = {
   'tutorial.pipelines.JsonWriterPipeline': 1,
}

在这篇文章中,我们更深入地探讨了Scrapy的功能,包括如何使用Selectors和Item提取数据,如何使用Pipelines处理数据。在下一篇文章中,我们将学习如何使用Scrapy处理更复杂的情况,如登录、cookies、以及如何避免爬虫被网站识别和封锁等问题。


http://www.niftyadmin.cn/n/5012387.html

相关文章

DGA行为转变引发了对网络安全的担忧

Akamai的研究人员发现,在域名系统(DNS)流量数据中,动态种子域生成算法(DGA)家族的行为发生了令人担忧的变化。这一发现揭示了恶意行为者如何调整他们的策略来延长他们的指挥与控制(C2)通信通道的寿命,以保护他们的僵尸网络。 从技术角度来看…

aws-msk-托管kafka集群的简单使用(VPC内部访问:无验证和SASL认证)

1.使用控制台创建即可 根据实例类型创建需要至少15分以上,可以提前创建好ec2实例和Secrets Manager,一会会使用到 2. 创建Secrets Manager (使用无认证时请跳过) 官方文档:https://docs.aws.amazon.com/zh_cn/msk/latest/deve…

iOS左对齐自动换行collection样式

前言 想必大家工作中或多或少会遇到下图样式的UI需求吧 像这种cell长度不固定,以此向右对齐排列的样式UI可以说是很常见的 实现方式 一般的实现可能主要是分一下两种: 1、一种是用button依次排列实现,动态计算text宽度,记录之…

基于大规模MIMO通信系统的半盲信道估计算法matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %EM算法收敛所需的迭代 nIter 1; Yp Y(:,1:L_polit,:); %与导频序列相对应的部分 q…

【Spring容器的启动流程】

Spring容器的启动流程主要分为以下几个步骤: 加载配置文件:Spring容器会从指定的配置文件中读取配置信息,包括bean的定义、依赖关系、AOP切面等。 创建容器:Spring容器启动后会创建一个容器实例,容器负责管理bean的生…

高德地图通过画面中的一个覆盖物设置图中心点和zoom

需要将这个覆盖物置于地图中间且不超过地图边界的放至最大 计算覆盖物中心点,定为地图中心点 计算覆盖物的最大经纬度,和最小经纬度,测算出实际最长距离,根据距离与zoom对应关系设置zoom function getAreaCenter(params, info)…

使用Vagrant创建和管理本地Kubernetes(K8s)集群的步骤是什么

文章目录 步骤1:准备环境步骤2:创建Vagrantfile步骤3:启动虚拟机步骤4:安装Kubernetes步骤5:配置Kubernetes网络插件步骤6:将Worker节点加入集群步骤7:验证集群步骤8:部署应用步骤9&…

VSCode学习笔记一:添加代码模板

一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问:为什么要设置代码模板? 答:编程语言是有个性的,不同语言的演讲风格是不一样的。 旁白:我不懂?! 问:为什么要设置…