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
Oefeninstructies
- Vul hieronder de enige lege plek in de methode
parse_pagesin met een CSS Locator-string die verwijst naar de tekst binnen het alinea-elementpdat tot de classcourse__descriptionbehoort.
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)