使用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实现数据的处理。