Uso de oleoducto Scrapy
objetivo de aprendizaje:
- Domine el uso de tuberías chatarra (pipelines.py)
Antes, aprendimos el uso básico de la tubería en la sección de "Introducción a scrapy", y luego aprendemos más sobre el uso de la tubería scrapy.
1. Métodos de uso común en canalización:
- process_item (yo, artículo, araña):
- Funciones que deben estar en la clase de canalización
- Realizar el procesamiento de datos de artículos
- Debe devolver el artículo
- open_spider (self, spider): se ejecuta solo una vez cuando se inicia la araña
- close_spider (self, spider): ejecutar solo una vez cuando la araña está cerrada
2. Modificación del archivo de canalización
Continuar mejorando el rastreador wangyi y mejorarlo en el 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 la tubería
Abra la canalización en settings.py
......
ITEM_PIPELINES = {
'myspider.pipelines.ItcastFilePipeline': 400, # 400表示权重
'myspider.pipelines.ItcastMongoPipeline': 500, # 权重值越小,越优先执行!
}
......
No olvide activar la base de datos mongodb sudo service mongodb start
y ver la base de datos en mongodbmongo
Pensando: puede abrir varios canales en la configuración, ¿por qué necesita abrir varios canales?
- Diferentes canalizaciones pueden procesar diferentes datos de rastreadores, que se distinguen por la propiedad spider.name
- Diferentes canalizaciones pueden realizar diferentes operaciones de procesamiento de datos en uno o más rastreadores, como uno para la limpieza de datos y otro para el almacenamiento de datos.
- La misma clase de canalización también puede procesar datos de diferentes rastreadores, que se distinguen por la propiedad spider.name
4. Puntos a tener en cuenta al utilizar la canalización
- Debe activarse en la configuración antes de su uso
- La clave de la tubería en la configuración indica la posición (es decir, la posición de la tubería en el proyecto se puede personalizar) y el valor indica la distancia al motor. Cuanto más cerca estén los datos, antes pasarán los datos: cuanto menor sea el valor de peso, la primera ejecución
- Cuando hay varias canalizaciones, el método process_item debe devolver el elemento; de lo contrario, los datos recuperados por la última canalización serán Ninguno.
- El método process_item en la canalización debe estar presente; de lo contrario, el artículo no se puede aceptar ni procesar
- El método process_item acepta el elemento y la araña, donde la araña representa la araña que está pasando actualmente el elemento
- open_spider (araña): se puede ejecutar una vez cuando se inicia el rastreador
- close_spider (araña): se puede ejecutar una vez cuando el rastreador está cerrado
- Los dos métodos anteriores se utilizan a menudo para la interacción entre el rastreador y la base de datos. La conexión a la base de datos se establece cuando se inicia el rastreador y la conexión a la base de datos se desconecta cuando se cierra el rastreador.
resumen
- La canalización puede realizar la limpieza y el almacenamiento de datos, y puede definir varias canalizaciones para realizar diferentes funciones. Hay tres métodos
- process_item (self, item, spider): realiza el procesamiento de los datos del artículo
- open_spider (self, spider): se ejecuta solo una vez cuando se inicia la araña
- close_spider (self, spider): ejecutar solo una vez cuando la araña está cerrada
Este es el final, si te ayuda, bienvenido a gustar y seguir, tus me gusta son muy importantes para mí