日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用scrapy的item来封装数据

發布時間:2025/3/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用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来封装数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。