Python爬虫——使用Item实现数据的封装(二)

使用scrapy实现爬虫实例——继上一章spider数据爬取

一、Item介绍

       上章通过Spider爬取到了数据,为了收集抓取到的这些数据,Scrapy提供了一个简单的容器Item。Item对象是一个简单的容器,用于收集抓取到的数据,其提供了类似于字典(dictionary-like)的API并具有用于声明可用字段的简单语法。Scrapy还定义了一个类Field,用于描述自定义数据类包含的字段。

二、使用Item实现数据封装——将数据写入csv文件中

items.py代码:
在items.py中定义字段

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy


class BooksscrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # 书名
    name = scrapy.Field()
    # 价格
    price = scrapy.Field()
    

booksSpider.py代码:
步骤:
①从items.py文件中导入BooksscrapyItem类:from booksSpider.items import BooksscrapyItem
创建BooksscrapyItem类的对象item来获取数据,使用形如字典的形式来获取name和price:
item[“name”] = name
item[“price”] = price

③在start.py文件中运行.将数据保存到books.csv文件中(用 -o 操作来生成books.csv文件):
from scrapy import cmdline
cmdline.execute(“scrapy crawl books -o books.csv”)

from scrapy import Request
from scrapy.spiders import Spider
from booksScrapy.items import BooksscrapyItem

class booksSpider(Spider):
    name = 'books'  # 给爬虫起一个名字
    # 初始请求,用于获取起始的url
    def start_requests(self):
        url = 'http://books.toscrape.com/catalogue/category/books_1/index.html'
        yield Request(url)
    # 解析数据的函数
    def parse(self, response):
        item = BooksscrapyItem()  # 定义Item类的对象,用于保存一条数据
        li_selector = response.xpath('//ol[@class="row"]/li')
        for one_selector in li_selector:
            # 获取书名
            name = one_selector.xpath('article[@class="product_pod"]/h3/a/@title').extract()[0]
            # 价格
            price = one_selector.xpath('article[@class="product_pod"]/div[@class="product_price"]/p[1]/text()').extract()[0]
            item["name"] = name
            item["price"] = price
            yield item
        # 下一页
        next_url = response.xpath('//li[@class="next"]/a/@href').extract()
        if next_url:
            next_url = "http://books.toscrape.com/catalogue/category/books_1/" + next_url[0]
            yield Request(next_url)

运行结果:
系统自动生成一个books.csv文件并将数据保存到其文件中
在这里插入图片描述
在这里插入图片描述

三、总结

    本章讲了使用Item封装数据,先在items.py中定义字段,再到Spider文件夹中的爬虫文件booksSpider.py中定义类的对象来接收数据,最后生成csv文件。
    下一章会记录使用Pipeline实现数据的处理。

发布了27 篇原创文章 · 获赞 7 · 访问量 2127

猜你喜欢

转载自blog.csdn.net/lucky_shi/article/details/104865048