欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中scrapy框架的ltem和scrapy.Request詳解

 更新時間:2023年09月20日 08:32:47   作者:松鼠愛吃餅干  
這篇文章主要介紹了Python中scrapy框架的ltem和scrapy.Request詳解,Item是保存爬取數據的容器,它的使用方法和字典類似,不過,相比字典,Item提供了額外的保護機制,可以避免拼寫錯誤或者定義字段錯誤,需要的朋友可以參考下

Item

Item是保存爬取數據的容器,它的使用方法和字典類似。不過,相比字典,Item提供了額外的保護機制,可以避免拼寫錯誤或者定義字段錯誤。

創(chuàng)建Item需要繼承scrapy.Item類,并且定義類型為scrapy.Field的字段。在創(chuàng)建項目開始的時候Item文件是這樣的。

import scrapy
class Tutorial1tem(scrapy.Item):
    #define the fields for your item here 7ike:#參照下面這個參數定義你的字段
    #name = scrapy.Fie1d()
    pass

在保存數據的時候可以每次初始化一個字典等格式,但是最方便,最好的保存方式就是使用Scrapy自帶的ltem數據結構了。

我們學習了從頁面中提取數據的方法,接下來學習如何封裝爬取到的數據。應該用怎樣的數據結構來維護這些零散的信息字段呢?最容易想到是使用Python字典(dict)。

回顧之前的代碼

class Quotesspider(scrapy.spider):
    name = 'quotes'
    a1lowed_domains = ['toscrape.com']
    start_ur1s = ['http: //quotes.toscrape.com/']
def parse(self,response):
    quotes = response.css( '.quote ' )
    for quote in quotes :
        text = quote.css('.text: :text ').get()
        author = quote.css( '.author : :text ').get()
        tags = quote.css( '.tag : :text ' ).getall()
    yield {
    'text':text,
    'author':author,
    'tags ' : tags,
    }

在該案例中,我們便使用了Python字典存儲一本書的信息,但字典可能有以下缺點:

(1)無法一目了然地了解數據中包含哪些字段,影響代碼可讀性。

(2缺乏對字段名字的檢測,容易因程序員的筆誤而出錯。

(3)不便于攜帶元數據(傳遞給其他組件的信息)。

ltem和Field

Scrapy提供了以下兩個類,用戶可以使用它們自定義數據類(如書籍信息),封裝爬取到的數據:

1. ltem基類

數據結構的基類,在items.py中定義數據結構時,需要繼承自該基類。

2. Field類

用來描述自定義數據類包含哪些字段(如name、price等)。

自定義一個數據類,只需繼承l(wèi)tem,并創(chuàng)建一系列Field對象的類屬性即可。

以定義書籍信息quote為例,它包含個字段,分別為書的名字text、author和tags,代碼如下:

#特殊的字典結構可以在scrapy中傳遞數據
class TutorialItem(scrapy.Item):
    #Field字段
    #就是類似于產生一個類似字典格式的數據擁有字典的一些屬性
    #字段默認為空
    #我們可以通過實例化像著鍵賦值但是如果沒有寫這個鍵就不能賦值但是字典可以
    text = scrapy. Field()
    author = scrapy.Fie1d()
    tags = scrapy . Fie1d()

ltem支持字典接口,因此Tutorialltem在使用上和Python字典類似。

對字段進行賦值時,Tutorialltem內部會對字段名進行檢測,如果賦值一個沒有定義的字段,就會拋出異常(防止因用戶粗心而導致錯誤)

scrapy.Request

Request和Response 對象,用于爬網網站。 Request對象用來描述一個HTTP請求,下面是其構造器方法的參數列表:

Request(url,ca11back=None,method='GET', headers=None,body=None,
        cookies=None,meta=None,encoding='utf-8 ',priority=O,
        dont_filter=False,errback=None,flags=None,cb_kwargs=None)
  • url(字符串) -此請求的URL
  • callback (callable)-將以請求的響應(一旦下載)作為第一個參數調用的函數。有關更多信息,請參見下面的將其他數據傳遞給回調函數。如果"請求'未指定回調,parse()則將使用"Spider"方法。請注意,如果在處理過程中引發(fā)異常,則會調用errback.
  • method(字符串)-此請求的HTTP方法。默認為‘GET'。
  • meta (dict) - Request.meta屬性的初始值。如果給出,則在此參數中傳遞的字典將被淺表復制。
  • headers (dict)-請求頭。dict值可以是字符串(對于單值標頭)或列表(對于多值標頭)。如果None作為值傳遞,則將根本不發(fā)送HTTP標頭。
c1ass Quotesspider(scrapy.spider):
    name = 'quotes_3'
    allowed_domains = ['toscrape.com']
    start__ur1s = ['http://quotes.toscrape.com/']
def parse(self,response):
    quotes = response.css( '.quote ' )
    for quote in quotes:
        text = quote.css( '.text: :text ' ).get()
        author = quote.css( '.author : :text ' ).get()
        tags = quote.css( '.tag : :text ' ). geta11()
        yield Qd01QuotesItem(text=text,author=author,tags=tags)
    next_page = response.css( '.next a: :attr(href) ' ).get()
    if next_page:
        next__ur1 = 'http: //quotes.toscrape.com' + next_page
        yield scrapy. Request(next_url, cal7back=self.parse)

到此這篇關于Python中scrapy框架的ltem和scrapy.Request詳解的文章就介紹到這了,更多相關scrapy框架的ltem、scrapy.Request內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在IntelliJ IDEA 搭建springmvc項目配置debug的教程詳解

    在IntelliJ IDEA 搭建springmvc項目配置debug的教程詳解

    這篇文章主要介紹了在IntelliJ IDEA 搭建springmvc項目配置debug的教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • springboot vue 跨域問題的解決

    springboot vue 跨域問題的解決

    這篇文章主要介紹了springboot vue 跨域問題的解決,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • Java中正則表達式split()特殊符號使用詳解

    Java中正則表達式split()特殊符號使用詳解

    這篇文章主要介紹了Java中正則表達式split()特殊符號使用詳解, 文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 如何在Java中使用標準庫創(chuàng)建臨時文件

    如何在Java中使用標準庫創(chuàng)建臨時文件

    有時候我們程序運行時需要產生中間文件,但是這些文件只是臨時用途,并不做長久保存,我們可以使用臨時文件,不需要長久保存,這篇文章主要給大家介紹了關于如何在Java中使用標準庫創(chuàng)建臨時文件的相關資料,需要的朋友可以參考下
    2023-10-10
  • 淺析final,finally,finalize 的區(qū)別

    淺析final,finally,finalize 的區(qū)別

    以下是對final,finally,finalize的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Java中兩個字符串進行大小比較的方法

    Java中兩個字符串進行大小比較的方法

    這篇文章主要介紹了Java中兩個字符串進行大小比較,符串是否相等比較,只能使用equals()方法,不能使用“==”,本文通過示例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • SpringBoot整合Activiti工作流框架的使用

    SpringBoot整合Activiti工作流框架的使用

    本文主要介紹了SpringBoot整合Activiti工作流框架的使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Kafka是什么及如何使用SpringBoot對接Kafka(最新推薦)

    Kafka是什么及如何使用SpringBoot對接Kafka(最新推薦)

    這篇文章主要介紹了Kafka是什么,以及如何使用SpringBoot對接Kafka,今天我們通過一個Demo講解了在SpringBoot中如何對接Kafka,也介紹了下關鍵類?KafkaTemplate,需要的朋友可以參考下
    2023-11-11
  • CentOS?7.9服務器Java部署環(huán)境配置的過程詳解

    CentOS?7.9服務器Java部署環(huán)境配置的過程詳解

    這篇文章主要介紹了CentOS?7.9服務器Java部署環(huán)境配置,主要包括ftp服務器搭建過程、jdk安裝方法以及mysql安裝過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • mybatisplus+pgsql查詢bug的解決

    mybatisplus+pgsql查詢bug的解決

    本文主要介紹了mybatisplus+pgsql查詢bug的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論