[Scrapy artículo y el artículo Cargadores frontales] y utilizan Cargadores de base y del artículo (cargador de proyecto) El uso básico

                                        El uso básico del artículo

        El artículo es un lugar para almacenar datos de configuración, los resultados analíticos Scrapy pueden ser devueltos en un diccionario, pero la falta de estructura en el diccionario de Python, que era muy conveniente en el sistema de reptil grande. Categoría del artículo ofrece diccionarios API, y puede ser fácilmente campo se declara, muchos otros componentes pueden utilizarse información Scrapy artículo. Los métodos básicos son los siguientes:

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

        objeto de campo sirve para especificar los metadatos para cada campo. El ejemplo anterior función de serialización LAST_UPDATED se designa como str, se puede especificar los metadatos, cada uno de metadatos pero diferente significado para diferentes componentes.

        Registro de acceso de valor, tales como el acceso a los valores del diccionario de la siguiente manera:

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

#访问值得方法

>>> product['last_updated']
today

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

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

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

                                      El uso básico de la cargadora de artículos

        Artículo cargador proporciona un método muy conveniente para generar artículo para nosotros. Elemento proporciona un contenedor para los datos capturados, y el elemento cargador nos permite entrar muy fácilmente ser introducidas en el contenedor.

       Cargadores del artículo (cargador del proyecto), lo que significa que cuando una gran cantidad de tiempo del proyecto, la extracción de cientos de campos, es muy difícil de hacer mantenimiento.
       Por lo tanto scrapy proporciona una ItemLoader tales contenedor, dentro del contenedor se puede configurar en esta regla de extracción en cada campo de elementos. Los datos originales puede ser analizada por la función, y la asignación de campos de artículo, muy conveniente. web de referencia: https: //blog.csdn.net/zwq912318834/article/details/79530828
       así vistazo a punto y la Itemloader: Oferta de artículos para guardar los datos de contenedor de agarre, y proporcionar un mecanismo para contenedores de llenado Itemloader.
       Itemloader proporciona un mecanismo flexible y eficiente que puede ser más fácil de araña o formato de la fuente (HTML, XML, etc. ) para expandir y volver a escribir, más fácil de mantener, especialmente en el análisis de reglas complejas, especialmente en numerosas ocasiones.

 

En el uso general, su uso en el archivo .py rastreador:

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()填充到容器中

En item.py puede personalizar los campos de:

Hay dos maneras, primero es añadir una clase personalizada en el punto 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)

La segunda forma es añadir la definición fichero de artículos Métodos de Campo

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(),
    )

 

Publicado 56 artículos originales · ganado elogios 2 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/fan13938409755/article/details/104838136
Recomendado
Clasificación