Scrapy da entrada ao abandono 4 - uso de pipelines

Uso de pipeline Scrapy

Insira a descrição da imagem aqui

alvo de aprendizagem:
  1. Domine o uso de pipelines difíceis (pipelines.py)

Anteriormente, aprendemos o uso básico do pipeline na seção "Introdução ao scrapy". A seguir, aprenderemos mais sobre o uso do pipeline de scrapy.

1. Métodos comumente usados ​​em pipeline:

  1. process_item (self, item, spider):
    • Funções que devem estar na classe pipeline
    • Perceba o processamento dos dados do item
    • Deve devolver o item
  2. open_spider (self, spider): executa apenas uma vez quando o spider é iniciado
  3. close_spider (self, spider): executa apenas uma vez quando o spider está fechado

2. Modificação do arquivo pipeline

Continue aprimorando o rastreador wangyi e aprimorando-o no código pipelines.py

import json
from pymongo import MongoClient

class WangyiFilePipeline(object):
    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == 'itcast':
            self.f = open('json.txt', 'a', encoding='utf-8')

    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == 'itcast':
            self.f.close()

    def process_item(self, item, spider):
        if spider.name == 'itcast':
            self.f.write(json.dumps(dict(item), ensure_ascii=False, indent=2) + ',\n')
        # 不return的情况下,另一个权重较低的pipeline将不会获得item
        return item  

class WangyiMongoPipeline(object):
    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == 'itcast':
        # 也可以使用isinstanc函数来区分爬虫类:
            con = MongoClient(host='127.0.0.1', port=27017) # 实例化mongoclient
            self.collection = con.itcast.teachers # 创建数据库名为itcast,集合名为teachers的集合操作对象

    def process_item(self, item, spider):
        if spider.name == 'itcast':
            self.collection.insert(item) 
            # 此时item对象必须是一个字典,再插入
            # 如果此时item是BaseItem则需要先转换为字典:dict(BaseItem)
        # 不return的情况下,另一个权重较低的pipeline将不会获得item
        return item  

3. Abra o pipeline

Abra o pipeline em settings.py

......
ITEM_PIPELINES = {
    'myspider.pipelines.ItcastFilePipeline': 400, # 400表示权重
    'myspider.pipelines.ItcastMongoPipeline': 500, # 权重值越小,越优先执行!
}
......

Não se esqueça de ativar o banco de dados mongodb sudo service mongodb start
e visualizar o banco de dados no mongodbmongo

Pensando: você pode abrir vários canais nas configurações, por que você precisa abrir vários canais?

  1. Pipelines diferentes podem processar dados do rastreador diferentes, diferenciados pela propriedade spider.name
  2. Pipelines diferentes podem executar diferentes operações de processamento de dados em um ou mais rastreadores, como um para limpeza de dados e outro para armazenamento de dados
  3. A mesma classe de pipeline também pode processar dados de rastreadores diferentes, diferenciados pela propriedade spider.name

4. Pontos a serem observados ao usar pipeline

  1. Precisa ser ativado nas configurações antes de usar
  2. A chave do pipeline na configuração indica a posição (ou seja, a posição do pipeline no projeto pode ser personalizada) e o valor indica a distância até o motor. Quanto mais próximos os dados, mais cedo eles passarão: quanto menor o valor do peso, a primeira execução
  3. Quando há vários pipelines, o método process_item deve retornar item, caso contrário, os dados recuperados pelo último pipeline serão Nenhum.
  4. O método process_item no pipeline deve estar presente, caso contrário, o item não pode ser aceito e processado
  5. O método process_item aceita item e spider, onde spider representa o spider que está passando o item
  6. open_spider (spider): pode ser executado uma vez quando o rastreador é iniciado
  7. close_spider (spider): pode ser executado uma vez quando o rastreador é fechado
  8. Os dois métodos acima são freqüentemente usados ​​para a interação entre o rastreador e o banco de dados.A conexão com o banco de dados é estabelecida quando o rastreador é iniciado e a conexão com o banco de dados é desconectada quando o rastreador é fechado.

resumo

  • O pipeline pode realizar limpeza e armazenamento de dados e pode definir vários pipelines para realizar funções diferentes. Existem três métodos
    • process_item (self, item, spider): realiza o processamento dos dados do item
    • open_spider (self, spider): executa apenas uma vez quando o spider é iniciado
    • close_spider (self, spider): executa apenas uma vez quando o spider está fechado

É o fim, se te ajudar, seja bem-vindo para curtir e seguir, seus curtidas são muito importantes para mim

Acho que você gosta

Origin blog.csdn.net/qq_45176548/article/details/111991230
Recomendado
Clasificación