Descripciones de DataCamp
Como en el ejercicio anterior, aquí el código es largo, ¡ya que estás trabajando con una araña de web crawling entera! Pero, de nuevo, no dejes que la cantidad de código te intimide, ahora ya sabes cómo funcionan las arañas y eres perfectamente capaz de completar la sencilla tarea que te proponemos aquí.
Como en el ejercicio anterior, hemos creado una función previewCourses
que te permite previsualizar la salida de la araña, pero siempre puedes explorar también el diccionario dc_dict
después de ejecutar el código.
En este ejercicio, se te pide que crees una cadena de localización CSS directa al texto de la descripción del curso. Todo lo que necesitas saber es que en la página del curso, el texto de descripción del curso está dentro de un elemento de párrafo p
que pertenece a la clase course__description
(dos subrayados).
Este ejercicio forma parte del curso
Web scraping en Python
Instrucciones de ejercicio
- Rellena el único espacio en blanco del método
parse_pages
con una cadena de localización CSS que dirija al texto dentro del párrafop
elemento que pertenece a la clasecourse__description
.
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
Pruebe este ejercicio completando este 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_Description_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):
# Create a SelectorList of the course titles text
crs_title = response.xpath('//h1[contains(@class,"title")]/text()')
# Extract the text and strip it clean
crs_title_ext = crs_title.extract_first().strip()
# Create a SelectorList of course descriptions text
crs_descr = response.css( ____ )
# Extract the text and strip it clean
crs_descr_ext = crs_descr.extract_first().strip()
# Fill in the dictionary
dc_dict[crs_title_ext] = crs_descr_ext
# Initialize the dictionary **outside** of the Spider class
dc_dict = dict()
# Run the Spider
process = CrawlerProcess()
process.crawl(DC_Description_Spider)
process.start()
# Print a preview of courses
previewCourses(dc_dict)