如何使用scrapy的item来封装数据

简介: 如何使用scrapy的item来封装数据 我们是使用字典来对数据进行传递,使用字典有以下缺点。 无法直观地了解数据中包含哪些字段 缺乏对字段名字的检测 不便于携带元数据 为了克服上述问题,我们可以使用scrapy中自定义的item类封装爬取到的数据。

如何使用scrapy的item来封装数据

我们是使用字典来对数据进行传递,使用字典有以下缺点。

  1. 无法直观地了解数据中包含哪些字段
  2. 缺乏对字段名字的检测
  3. 不便于携带元数据

为了克服上述问题,我们可以使用scrapy中自定义的item类封装爬取到的数据。

spider.py文件

import  scrapy
from books.bookitem import BookItems

class BooksSpider(scrapy.Spider):

    name = "start"
    start_urls = ["http://books.toscrape.com/"]

    def parse(self, response):
        for book in response.css('article.product_pod'):
            name = book.xpath('./h3/a/@title').extract_first()
            price = book.css('p.price_color::text').extract_first()
            item = BookItems()
            item['name'] = name
            item['price'] = price
            yield item

        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        if next_url:
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url , callback=self.parse)

     
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

这里写图片描述

新建一个文件bookitem.py

from scrapy import Item,Field

class BookItems(Item):

    name = Field()
    price = Field()

     
     
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到运行结果如下: 
这里写图片描述
正确传送了name和price数据。

核心代码解读

item = BookItems() 
item[‘name’] = name 
item[‘price’] = price 
yield item

首先实例化BookItems,然后将解析得到的name和price传入给item,并用yield返回给引擎处理。 
注意,这里item的键是和定义的字段相对应的,如果写成item[‘names’] = name,会报错。

class BookItems(Item): 
name = Field() 
price = Field()

Item类是自定义数据类(BookItems)的基类,需要被自定义数据类继承。 
Field类是用来描述自定义数据类包含哪些字段,如name、price等。

小结

该篇简单介绍了Item基类和用来定义字段的Field类的用法,还有更多的用法以后再学习。

原文地址 https://blog.csdn.net/f156207495/article/details/81304906
相关文章
|
8月前
|
数据采集 中间件 Python
Scrapy爬虫:利用代理服务器爬取热门网站数据
Scrapy爬虫:利用代理服务器爬取热门网站数据
|
3月前
|
数据采集 前端开发 数据处理
Scrapy的Lambda函数用法:简化数据提取与处理的技巧
在现代爬虫开发中,**Scrapy** 是一个广泛使用的高效 Python 框架,适用于大规模数据爬取。本文探讨如何利用 Python 的 **Lambda 函数** 简化 Scrapy 中的数据提取与处理,特别是在微博数据爬取中的应用。通过结合 **代理IP**、**Cookie** 和 **User-Agent** 设置,展示了实际用法,包括代码示例和优化技巧,以提高爬虫的稳定性和效率。使用 Lambda 函数能显著减少代码冗余,提升可读性,有效应对复杂的数据清洗任务。
|
3月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
53 1
|
数据采集 JSON 前端开发
Python爬虫进阶:使用Scrapy库进行数据提取和处理
在我们的初级教程中,我们介绍了如何使用Scrapy创建和运行一个简单的爬虫。在这篇文章中,我们将深入了解Scrapy的强大功能,学习如何使用Scrapy提取和处理数据。
|
8月前
|
数据采集 存储 JSON
如何使用Scrapy提取和处理数据
如何使用Scrapy提取和处理数据
150 0
|
8月前
|
数据采集 中间件 Python
Scrapy框架 -- 结合selenium获取动态加载数据
Scrapy框架 -- 结合selenium获取动态加载数据
69 0
|
数据采集 中间件 Python
Scrapy框架 -- 结合selenium获取动态加载数据
Scrapy框架 -- 结合selenium获取动态加载数据
72 0
|
数据采集 XML 存储
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
这个案例展示了如何使用 Scrapy 框架构建一个简单的爬虫项目,从网页中提取数据并保存到文件中。通过配置、编写爬虫代码、定义数据模型和数据处理管道,你可以灵活地构建各种爬虫应用。
344 0
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
|
数据采集 存储 数据可视化
如何使用Scrapy框架抓取电影数据
如何使用Scrapy框架抓取电影数据
|
JSON 中间件 API
Scrapy中的parse命令:灵活处理CSV数据的多功能工具
Scrapy是一个用Python编写的开源框架,它可以快速地从网站上抓取数据。Scrapy提供了许多强大的功能,其中之一就是parse命令,它可以让你灵活地处理CSV数据。CSV(逗号分隔值)是一种常用的数据格式,它用逗号来分隔不同的字段。在本文中,我们将介绍parse命令的基本用法,以及它的一些亮点和案例。
174 0
Scrapy中的parse命令:灵活处理CSV数据的多功能工具