Aan de slagGa gratis aan de slag

DataCamp-beschrijvingen

Net als in de vorige oefening is de code hier lang, omdat je werkt met een volledige web-crawling spider! Maar laat je niet intimideren door de hoeveelheid code: je snapt nu hoe spiders werken en je kunt de eenvoudige taak hier prima aan.

Zoals in de vorige oefening hebben we een functie previewCourses gemaakt waarmee je de output van de spider kunt bekijken, maar je kunt na het uitvoeren van de code ook gewoon de dictionary dc_dict verkennen.

In deze oefening maak je een CSS Locator-string die direct naar de tekst van de cursusbeschrijving wijst. Het enige wat je hoeft te weten, is dat op de cursuspagina de beschrijvingstekst in een alinea-element p staat dat behoort tot de class course__description (twee underscores).

Deze oefening maakt deel uit van de cursus

Webscraping in Python

Cursus bekijken

Oefeninstructies

  • Vul hieronder de enige lege plek in de methode parse_pages in met een CSS Locator-string die verwijst naar de tekst binnen het alinea-element p dat tot de class course__description behoort.

LET OP: Als je Code uitvoeren gebruikt, moet je Terugzetten naar voorbeeldcode doen om daarna Code uitvoeren opnieuw te kunnen gebruiken!!

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

# 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)
Code bewerken en uitvoeren