[Scrapy 아이템 및 아이템 로우더] 및 기본 항목과 로더 (프로젝트 로더에게)의 기본적인 사용을 사용

                                        항목의 기본 사용

        항목, Scrapy 분석 결과가 사전에 반환 될 수있는 구성 데이터를 저장하는 장소,하지만 큰 파충류 시스템에서 매우 편리했다 파이썬 사전에 구조의 부족이다. 상품 카테고리는 사전 API를 제공하고, 쉽게 필드가 선언되고, 많은 다른 구성 요소가 Scrapy 정보 항목 활용 할 수 할 수 있습니다. 다음과 같이 기본적인 방법은 다음과 같습니다 :

import scrapy
class MovieItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()

        이 필드의 목적은 각각의 필드에 대한 메타 데이터를 지정할. 위의 예 LAST_UPDATED 직렬화 함수는 STR로 지정된 다른 구성 요소에 대한 메타 데이터, 각 메타하지만 다른 의미를 지정할 수있다.

        그런 다음 사전 값에 대한 액세스와 같은 값의 액세스 항목 :

#设置值的方法
product['last_updated'] = 'today'

#访问值得方法

>>> product['last_updated']
today

>>> product.keys()
['price', 'name']

>>> product.items()
[('price', 1000), ('name', 'Desktop PC')]

>>> product.get('name')
Desktop PC

                                      항목 로더의 기본 사용

        항목 로더는 우리를 위해 항목을 생성하는 매우 편리한 방법을 제공합니다. 항목은 캡처 된 데이터에 대한 컨테이너를 제공하고, 항목 로더은 우리가 아주 쉽게 용기에 채워 입력 할 수 있습니다.

       필드의 수백을 추출하는 프로젝트에 많은 시간이, 매우 어려운 경우 유지 보수를 수행하는 것을 의미 항목 로우더 (프로젝트 로더).
       컨테이너가 각 항목이 필드 추출 규칙에 구성 될 수있다 내부 scrapy 따라서, 예컨대 용기 ItemLoader을 제공한다. 원래 데이터는 기능에 의해 분석하고, 항목 필드 할당, 매우 편리 할 수있다. 참고 웹 사이트 : HTTPS : //blog.csdn.net/zwq912318834/article/details/79530828
       그랩 컨테이너 데이터를 저장하고 Itemloader 충전 용기위한 메커니즘을 제공하는 항목 제공 : 그래서 항목을보고 Itemloader합니다.
       Itemloader 더 쉽게 거미 또는 소스 형식 (HTML, XML 등이 될 수있는 유연하고 효율적인 메커니즘을 제공한다 ) , 특히 복잡한 규칙, 특히 여러 차례의 분석에서, 쉽게 유지, 확장 및 재 작성 할 수 있습니다.

 

일반적인 사용에서, 크롤러 평 파일에 사용 :

from scrapy.loader import ItemLoader
#从items中调用Product的类
from myproject.items import Product
def parse(self, response):
    #ItemLoader中的参数包含两个参数,第一个是引入的类,第二个是浏览器响应的结果
    l = ItemLoader(item=Product(), response=response)
    #这个是三种字段的添加方法
    l.add_xpath('name', '//div[@class="product_name"]')
    l.add_css('stock', 'p#stock]')
    l.add_value('last_updated', 'today') # you can also use literal values
    #添加load_item()来提交字段
    return l.load_item()填充到容器中

item.py이 필드를 사용자 정의 할 수 있습니다에서 :

두 가지 방법은 첫 번째 항목에서 사용자 정의 클래스를 추가하는 것입니다있다 Itemloader

from scrapy.loader import ItemLoader
#Identity、TakeFirst、Join、Compose、MapCompose、SelectJmes都是内置的处理器
from scrapy.loader.processors import TakeFirst, MapCompose, Join

class ProductLoader(ItemLoader):
    #定义默认的ItemLoader.default_input_processor和ItemLoader.default_input_processor
    default_output_processor = TakeFirst()
    #通过_in和_out后缀来定义输入和输出处理器
    name_in = MapCompose(unicode.title)
    name_out = Join()
    price_in = MapCompose(unicode.strip)

두 번째 방법은 정의 필드 방법 항목에 파일을 추가하는 것입니다

import scrapy
#Identity、TakeFirst、Join、Compose、MapCompose、SelectJmes都是内置的处理器
from scrapy.loader.processors import Join, MapCompose, TakeFirst
from w3lib.html import remove_tags

def filter_price(value):
    if value.isdigit():
        return value

class Product(scrapy.Item):
    name = scrapy.Field(
        input_processor=MapCompose(remove_tags),
        output_processor=Join(),
    )
    price = scrapy.Field(
        input_processor=MapCompose(remove_tags, filter_price),
        output_processor=TakeFirst(),
    )

 

게시 56 개 원래 기사 · 원 찬양 2 ·은 30000 +를 볼

추천

출처blog.csdn.net/fan13938409755/article/details/104838136