Aan de slagGa gratis aan de slag

Tijd om te draaien

In de vorige les hebben we een complete webcrawler gebouwd om cursusinformatie op te halen uit elke cursus in de DataCamp-cursusdirectory. De les eindigde echter een beetje zonder climax, omdat we na het afronden van de parse-methoden niet meer met de code hebben gespeeld.

Het doel van deze oefening is om dat goed te maken!

De code die je in deze en de volgende oefening krijgt, is lang, omdat het de volledige spider is waar we de hele les aan hebben gewerkt! Laat je daar niet door afschrikken! Het idee van deze twee oefeningen is dat je een héél makkelijke taak krijgt, zodat je de code van deze spider bekijkt en uitvoert. Zo krijg je, ondanks de lengte, toch feeling met hoe alles werkt!

Deze oefening maakt deel uit van de cursus

Webscraping in Python

Cursus bekijken

Oefeninstructies

  • Vul de ene lege plek in aan het einde van de parse_pages-methoden om de hoofdstuktitels toe te wijzen aan het woordenboek waarvan de sleutel de bijbehorende curstitel is.

LET OP: Als je Code uitvoeren gebruikt, moet je eerst Terugzetten naar voorbeeldcode voordat je Code uitvoeren opnieuw succesvol kunt 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_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)
Code bewerken en uitvoeren