Scrapy中Item()类的常见用法
发布时间:2023-12-23 06:12:36
在Scrapy中,Item()类是用于定义爬取数据的模板。它类似于一个字典,可以用于存储和获取爬取的数据。它提供了一个规范的数据结构,使得爬虫可以很清晰地组织和提取爬取的数据。
下面是Item()类的常见用法以及使用示例:
1. 定义Item()类
可以通过继承scrapy.Item类来定义自己的Item()类,然后在其中定义要爬取的字段。
import scrapy
class MyItem(scrapy.Item):
field1 = scrapy.Field()
field2 = scrapy.Field()
...
2. 在爬虫中使用Item()类
在爬虫代码中,可以创建一个Item()类的实例,并且使用item['field_name']的方式来设置和访问字段的值。
import scrapy
from myproject.items import MyItem
class MySpider(scrapy.Spider):
name = "my_spider"
def parse(self, response):
item = MyItem()
item['field1'] = response.xpath('//h1/text()').get()
item['field2'] = response.css('.content p::text').getall()
yield item
3. 在Pipeline中处理Item()类
可以在Scrapy的Pipeline中对Item()类进行进一步的处理,如数据清洗、存储等操作。
import scrapy
class MyPipeline:
def process_item(self, item, spider):
# 数据清洗
item['field1'] = item['field1'].strip()
item['field2'] = [text.strip() for text in item['field2']]
# 存储到数据库
self.db.insert(item)
return item
4. 对Item()类添加验证器
可以使用Python的装饰器来添加字段验证器,确保爬取的数据符合预期的格式。
import scrapy
from scrapy.loader.processors import TakeFirst
class MyItem(scrapy.Item):
field1 = scrapy.Field(
input_processor=TakeFirst(),
output_processor=lambda v: v.strip()
)
field2 = scrapy.Field(
input_processor=lambda v: [text.strip() for text in v],
output_processor=TakeFirst()
)
5. Item()类的输出
可以使用scrapy crawl命令行工具的--output参数,将爬取的数据导出到不同格式的文件中。
$ scrapy crawl my_spider -o output.csv
这将把爬取的数据以CSV格式保存到output.csv文件中。
总结:
Scrapy中的Item()类是一个非常有用的工具,用于定义和处理爬取的数据。通过定义Item()类,可以清晰地组织和提取爬取的数据,并在Pipeline中进一步处理和存储。通过添加验证器和输出选项,可以确保得到符合预期的爬取数据。
