如何使用scrapy的item来封装数据
生活随笔
收集整理的這篇文章主要介紹了
如何使用scrapy的item来封装数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
引言
在第一篇如何寫第一個scrapy里面,我們是使用字典來對數據進行傳遞,使用字典有以下缺點。
為了克服上述問題,我們可以使用scrapy中自定義的item類封裝爬取到的數據。
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)新建一個文件bookitem.py
from scrapy import Item,Field class BookItems(Item):name = Field()price = Field()可以看到運行結果如下:
正確傳送了name和price數據。
核心代碼解讀
item = BookItems()
item[‘name’] = name
item[‘price’] = price
yield item
首先實例化BookItems,然后將解析得到的name和price傳入給item,并用yield返回給引擎處理。
注意,這里item的鍵是和定義的字段相對應的,如果寫成item[‘names’] = name,會報錯。
class BookItems(Item):
name = Field()
price = Field()
Item類是自定義數據類(BookItems)的基類,需要被自定義數據類繼承。
Field類是用來描述自定義數據類包含哪些字段,如name、price等。
小結
該篇簡單介紹了Item基類和用來定義字段的Field類的用法,還有更多的用法以后再學習。
總結
以上是生活随笔為你收集整理的如何使用scrapy的item来封装数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何写第一个scrapy
- 下一篇: 如何用item pipeline(管道)