Scrapy之item的介绍和使用

122 阅读2分钟

简单示例

Scrapy 是一个用于网络爬虫的 Python 框架,它可以帮助开发者快速编写爬虫程序来抓取网页内容。在 Scrapy 中,Item 是一种容器,用来保存从网页中提取的数据。它类似于 Python 中的字典,但是提供了额外的功能,如定义字段(Field)类型和元数据。

Item 的介绍

  • 定义 Item: 在 Scrapy 项目中,你需要先定义 Item 类,来描述你想要抓取的数据结构。每个 Item 可以有多个字段(Field),这些字段用于存储特定的数据片段。Field 对象实际上是 Python 字典的一个别名,它接受任何额外的关键字参数,这些参数可以作为字段的元数据。

  • 示例: 假设我们正在创建一个简单的书籍信息抓取爬虫,我们可以定义如下 Item

    import scrapy
    
    class BookItem(scrapy.Item):
        title = scrapy.Field()
        author = scrapy.Field()
        price = scrapy.Field()
        stock = scrapy.Field()
    

使用 Item

  • 填充 Item: 在你的 Spider 类中,当你解析网页并找到所需数据时,你可以实例化一个 Item 并填充相应的字段值。例如:

    def parse(self, response):
        item = BookItem()
        item['title'] = response.xpath('//h1/text()').get()
        item['author'] = response.css('p.author::text').get()
        item['price'] = response.css('p.price_color::text').get()
        item['stock'] = response.css('p.instock::text').get()
        yield item
    
  • 处理 Item: 一旦 Item 被生成,它可以被传递给 Item Pipeline 进行进一步处理,比如清洗数据、验证数据完整性或存储到数据库中。你需要在项目的 settings.py 文件中激活 Item Pipelines,并且实现一个或多个 pipeline 类来处理这些 Item

  • Item Pipeline 示例: 创建一个简单的 pipeline 来存储数据到 MySQL 数据库:

    from sqlalchemy.orm import sessionmaker
    from myproject.models import db_connect, create_table, Book
    
    class SaveBooksPipeline(object):
        def __init__(self):
            engine = db_connect()
            create_table(engine)
            self.Session = sessionmaker(bind=engine)
    
        def process_item(self, item, spider):
            session = self.Session()
            book = Book(**item)
            try:
                session.add(book)
                session.commit()
            except:
                session.rollback()
                raise
            finally:
                session.close()
    
            return item
    

记得在 settings.py 中添加你的 pipeline:

ITEM_PIPELINES = {
    'myproject.pipelines.SaveBooksPipeline': 500,
}

以上就是 Scrapy 中 Item 的基本介绍及如何在实际项目中使用的简单示例。


juejin.cn/post/743638… 代码修改

图片.png

在代码中实例化一个item

在items.py文件中提前定义字段

图片.png

判断item来自哪里

图片.png