Hora de ejecutar
En la última lección, creamos un rastreador web completo para acceder a la información de cada curso del directorio de cursos de DataCamp. Sin embargo, la lección pareció detenerse sin clímax, porque no jugamos con el código después de terminar los métodos de análisis sintáctico.
El objetivo de este ejercicio es remediarlo.
El código que te damos para que lo veas en este ejercicio y en el siguiente es largo, ¡porque es toda la araña que nos llevó la lección crear! Sin embargo, ¡no te dejes intimidar! El objetivo de estos dos ejercicios es darte una tarea muy fácil de completar, con la esperanza de que mires y ejecutes el código de esta araña. Así, aunque sea largo, ¡lo tendrás dominado!
Este ejercicio forma parte del curso
Web scraping en Python
Instrucciones del ejercicio
- Rellena el único espacio en blanco al final de los métodos de
parse_pages
para asignar los títulos de los capítulos al diccionario cuya clave es el título del curso correspondiente.
NOTE: Si pulsas Ejecutar código, ¡¡¡debes restablecer a código de muestra para volver a utilizar Ejecutar código correctamente!!!
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Import scrapy
import scrapy
# Import the CrawlerProcess: for running the spider
from scrapy.crawler import CrawlerProcess
# Create the Spider class
class DC_Chapter_Spider(scrapy.Spider):
name = "dc_chapter_spider"
# start_requests method
def start_requests(self):
yield scrapy.Request(url = url_short,
callback = self.parse_front)
# First parsing method
def parse_front(self, response):
course_blocks = response.css('div.course-block')
course_links = course_blocks.xpath('./a/@href')
links_to_follow = course_links.extract()
for url in links_to_follow:
yield response.follow(url = url,
callback = self.parse_pages)
# Second parsing method
def parse_pages(self, response):
crs_title = response.xpath('//h1[contains(@class,"title")]/text()')
crs_title_ext = crs_title.extract_first().strip()
ch_titles = response.css('h4.chapter__title::text')
ch_titles_ext = [t.strip() for t in ch_titles.extract()]
dc_dict[ crs_title_ext ] = ____
# Initialize the dictionary **outside** of the Spider class
dc_dict = dict()
# Run the Spider
process = CrawlerProcess()
process.crawl(DC_Chapter_Spider)
process.start()
# Print a preview of courses
previewCourses(dc_dict)