Last active
November 3, 2018 23:19
-
-
Save Wesitos/056eec7a71ed41c48a755ed10fe844d0 to your computer and use it in GitHub Desktop.
Taller scraping
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import scrapy | |
class PostulanteSpider(scrapy.Spider): | |
# El nombre del spider | |
# Es el nombre con el cual llamaremos a `scrapy crawl` | |
name = 'postulante' | |
# Las urls de inicio | |
start_urls = [ | |
'http://unmsm.claro.net.pe/WebResultados20181Sab/A.html', | |
'http://unmsm.claro.net.pe/WebResultados20181Dom/A.html', | |
] | |
def parse(self, response): | |
'''Parsea la tabla de especialidades | |
La única data que recolectamos de esta pagina son los nombres de las | |
carreras (la cual la guardamos como metadata del spider) | |
''' | |
for link in response.css('table a'): | |
link_text = link.css('::text').extract_first() | |
link_url = link.css('::attr(href)').extract_first() | |
# response.follow permite construir una petición a partir de un | |
# link relativo | |
yield response.follow( | |
link_url, | |
# `meta` es un diccionario de metadata que el spider | |
# va a recordar cuando scrapee otras paginas | |
meta={'carrera': link_text}, | |
# `callback` es la función que se encargará de parsear esta | |
# pagina | |
callback=self.parse_list | |
) | |
def parse_list(self, response): | |
'''Parsea una tabla de postulantes | |
Cada fila de la tabla es un postulante. Ademas, debemos | |
incluir la carrera (que guardamos previamente en la metadata del | |
spider) | |
''' | |
for row in response.css('tr')[1:]: | |
celdas = row.css("td::text").extract() | |
# Devolvemos el diccionario con la data de esta fila | |
yield { | |
'codigo': celdas[0], | |
'nombre': celdas[1], | |
'eap': celdas[2], | |
'puntaje': celdas[3], | |
'merito_eap': celdas[4], | |
'observacion': celdas[5], | |
# Agregamos el nombre de la carrera | |
'carrera': response.meta['carrera'] | |
} | |
# Tambien extraemos los links de paginación | |
for link in response.css('center>a::attr(href)').extract(): | |
# El spider conserva la metadata que le asignamos al inicio | |
yield response.follow(link) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment