Uso de pipeline Scrapy
alvo de aprendizagem:
- 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:
- process_item (self, item, spider):
- Funções que devem estar na classe pipeline
- Perceba o processamento dos dados do item
- Deve devolver o 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
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?
- Pipelines diferentes podem processar dados do rastreador diferentes, diferenciados pela propriedade spider.name
- 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
- 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
- Precisa ser ativado nas configurações antes de usar
- 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
- 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.
- O método process_item no pipeline deve estar presente, caso contrário, o item não pode ser aceito e processado
- O método process_item aceita item e spider, onde spider representa o spider que está passando o item
- open_spider (spider): pode ser executado uma vez quando o rastreador é iniciado
- close_spider (spider): pode ser executado uma vez quando o rastreador é fechado
- 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