DataCamp-Beschreibungen
Wie bei der vorherigen Aufgabe ist der Code hier sehr lang, da du mit einem ganzen Spider arbeitest, der durch das Netz crawlt! Aber auch hier gilt: Lass dich von der Menge an Code nicht einschüchtern. Du weißt jetzt, wie Spider funktionieren, und bist durchaus in der Lage, die einfache Aufgabe hier zu erledigen!
Wie in der vorherigen Aufgabe haben wir eine Funktion previewCourses
erstellt, mit der du die Ausgabe des Spiders in der Vorschau sehen kannst, aber du kannst auch einfach das Wörterbuch dc_dict
erkunden, nachdem du den Code ausgeführt hast.
In dieser Aufgabe sollst du einen CSS Locator-String erstellen, der direkt mit dem Text der Kursbeschreibung verbunden ist. Alles, was du wissen musst, ist, dass sich der Text der Kursbeschreibung auf der Kursseite in einem p
-Absatzelement befindet, das zur Klasse course__description
gehört (zwei Unterstriche).
Diese Übung ist Teil des Kurses
Web Scraping in Python
Anleitung zur Übung
- Fülle die eine Lücke unten in der
parse_pages
-Methode mit einem CSS Locator-String aus, der auf den Text innerhalb desp
-Elements verweist, das zur Klassecourse__description
gehört.
HINWEIS: Wenn du auf „Code ausführen“ klickst, musst du auf den Beispielcode zurücksetzen, um „Code ausführen“ wieder erfolgreich zu verwenden!
Interaktive Übung zum Anfassen
Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.
# 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)