-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPipelines.py
49 lines (40 loc) · 2.17 KB
/
Pipelines.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Aquí defino los flujos de los ítems en un pipeline
from rdflib import Graph
import Items
import RDFization
class RDFPipeline(object):
"""Los pipelines son clases que heredan de object y tienen, por lo menos, un método llamaado 'process_item'.
Los pipelines pueden tener más de un método, ver https://docs.scrapy.org/en/latest/topics/item-pipeline.html"""
def __init__(self):
self.graph = None # Aquí almaceno el objeto grafo de RDFLib al que iré añadiendo tripletas en "process_item"
def open_spider(self, spider):
# Cuando se abra el pipeline por primera vez, crearemos un grafo vacío con la librería RDFlib
print("Creating new graph")
self.graph = Graph()
self.graph.bind("unev", "http://data.ia.uned.es/vocabulary/")
self.graph.bind("uner", "http://data.ia.uned.es/resource/")
def process_item(self, item, spider):
# Este método define qué hacer cada vez que se inyecta un item en este pipeline
# Podemos acceder a los datos de la Spider que lo inyectó
if spider.name == "grado_spider":
if type(item) == Items.ItemAsignatura:
triplets = RDFization.asignatura_to_rdf(item)
for triplet in triplets:
self.graph.add(triplet)
elif type(item) == Items.ItemFacultad:
triplets = RDFization.facultad_to_rdf(item)
for triplet in triplets:
self.graph.add(triplet)
elif type(item) == Items.ItemGrado:
triplets = RDFization.grado_to_rdf(item)
for triplet in triplets:
self.graph.add(triplet)
def close_spider(self, spider):
# Cuando se acabe de recopilar ítems, se lanza este método
# Puedo acceder a la ruta del grafo especificado en GradoSpider
# Guardo el grafo empleando la librería RDFLib
self.graph.serialize(destination=spider.ruta_grafo, format="turtle", encoding="UTF-8")
class GreedyPipeline(object):
# Este pipeline solo imprime lo que se procesa
def process_item(self, item, spider):
print("Crawled item {0} from spider {1}".format(item, spider.name))