C 2. 背诵 - scrapy数据封装、处理、存储常用命令(18年7月)

1 Item 封装数据


  1. Item 类可以对爬取的数据进行封装,便于后续的处理、存储

  2. 封装步骤:
    ① 打开items.py,进行修改
    ② 再spider中进入items类

  3. items 简单应用:
    对图书名、作者数据进行封装

# items.py修改
import scrapy
from scrapy import Item,Field

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

# spider 修改
## '..items'表示返回上级菜单,找到items
from ..items import BookItem

class BookSpiderSpider(scrapy.Spider):
    ......
    def parse(self, response):
        for sel in response.css('article.product_pod'):
            book = BookItem()
            book['name'] = sel.xpath('./h3/a/@title').extract_first()
            book['price'] = sel.css('p.price_color::text').extract_first()
            ......
  • Field 元数据常用指令
# 1.将列表拼接成字符串(如拼接图书作者)
class BookItem(Item):
    authors = Field(serializer=lambda x: '|'.join(x))

2 Item Pipeline 处理数据


  1. Item Pipeline 可以处理、存储数据
  2. 处理从 spider 发送的,由Item 封装的数据
  3. 页面数据抓取用spider解析,其他用Item Pipeline
  4. 主要的三个模块:
    ① process_item(item, spider):处理数据
    ② open_spider(self, spider):打开文件或数据库
    ③ close_spider(self, spider):关闭文件或数据库
  5. 处理数据步骤:
    ① 打开pipelines.py,修改文件
    ② 打开setting.py,修改配置文件
  6. 简单应用
    图书价格汇率转换
# 1.修改pipelines.py文件
class PriceConverterPipeline(object):
    # 英镑兑换人民币汇率
    exchange_rate = 8.5309

    def process_item(self, item, spider):
        # 提取item的price 字段(如£53.74)
        # 去掉前面英镑符号£,转换为float 类型,乘以汇率
        price = float(item['price'][1:]) * self.exchange_rate

        # 保留2 位小数,赋值回item的price 字段
        item['price'] = '¥%.2f' % price
        return item

# 2.修改setting.py文件
# 数字表示执行顺序
ITEM_PIPELINES = {
'example.pipelines.PriceConverterPipeline': 300,
}

3 数据存储


  1. 使用Exporter导出数据
    scrapy crawl books -o books.csv
  2. 指定文件路径时,可使用%(name)s%(time)s两个特殊变量
# %(name)s : 会被替换为spider的名字
# %(time)s : 会被替换成文件创建时间

scrapy crawl books -o 'export_data/%(name)s.csv'
scrapy crawl books -o 'export_data/%(time)s.csv'
scrapy crawl books -o 'export_data/%(name)s/%(time)s.csv'

猜你喜欢

转载自blog.csdn.net/qq_41682050/article/details/81105886