简单示例
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… 代码修改
在代码中实例化一个item
在items.py文件中提前定义字段
判断item来自哪里