如何使用scrapy的item来封装数据
引言
在第一篇如何寫第一個(gè)scrapy里面,我們是使用字典來對(duì)數(shù)據(jù)進(jìn)行傳遞,使用字典有以下缺點(diǎn)。
為了克服上述問題,我們可以使用scrapy中自定義的item類封裝爬取到的數(shù)據(jù)。
spider.py文件
import scrapy from books.bookitem import BookItemsclass BooksSpider(scrapy.Spider):name = "start"start_urls = ["http://books.toscrape.com/"]def parse(self, response):for book in response.css('article.product_pod'):name = book.xpath('./h3/a/@title').extract_first()price = book.css('p.price_color::text').extract_first()item = BookItems()item['name'] = nameitem['price'] = priceyield itemnext_url = response.css('ul.pager li.next a::attr(href)').extract_first()if next_url:next_url = response.urljoin(next_url)yield scrapy.Request(next_url , callback=self.parse)新建一個(gè)文件bookitem.py
from scrapy import Item,Field class BookItems(Item):name = Field()price = Field()可以看到運(yùn)行結(jié)果如下:
正確傳送了name和price數(shù)據(jù)。
核心代碼解讀
item = BookItems()
item[‘name’] = name
item[‘price’] = price
yield item
首先實(shí)例化BookItems,然后將解析得到的name和price傳入給item,并用yield返回給引擎處理。
注意,這里item的鍵是和定義的字段相對(duì)應(yīng)的,如果寫成item[‘names’] = name,會(huì)報(bào)錯(cuò)。
class BookItems(Item):
name = Field()
price = Field()
Item類是自定義數(shù)據(jù)類(BookItems)的基類,需要被自定義數(shù)據(jù)類繼承。
Field類是用來描述自定義數(shù)據(jù)類包含哪些字段,如name、price等。
小結(jié)
該篇簡(jiǎn)單介紹了Item基類和用來定義字段的Field類的用法,還有更多的用法以后再學(xué)習(xí)。
總結(jié)
以上是生活随笔為你收集整理的如何使用scrapy的item来封装数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写第一个scrapy
- 下一篇: 如何用item pipeline(管道)