CommencezCommencez gratuitement

Descriptions DataCamp

Comme dans l'exercice précédent, le code est long, car vous travaillez avec une véritable araignée d'exploration Web ! Mais encore une fois, ne laissez pas la quantité de code vous intimider : vous comprenez maintenant le fonctionnement des spiders et vous êtes tout à fait en mesure de réaliser la petite tâche demandée ici.

Comme à l'exercice précédent, nous avons créé une fonction previewCourses qui vous permet d'apercevoir la sortie du spider, mais vous pouvez aussi simplement explorer le dictionnaire dc_dict après avoir exécuté le code.

Dans cet exercice, on vous demande de créer une chaîne de sélecteur CSS qui pointe directement vers le texte de la description du cours. Tout ce que vous devez savoir, c'est que, sur la page du cours, le texte de la description se trouve dans un élément paragraphe p qui appartient à la classe course__description (deux traits de soulignement).

Cette activité fait partie du cours

Extraction de données Web en Python

Voir le cours

Instructions de l’exercice

  • Remplissez l'unique blanc ci-dessous dans la méthode parse_pages avec une chaîne de sélecteur CSS qui pointe vers le texte à l'intérieur de l'élément paragraphe p appartenant à la classe course__description.

REMARQUE : Si vous cliquez sur Exécuter le code, vous devez Réinitialiser l'exemple de code pour pouvoir utiliser Exécuter le code de nouveau !!

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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)
Modifier et exécuter le code