Zeit zu laufen
In der letzten Lektion haben wir einen kompletten Webcrawler erstellt, um auf die Kursinformationen der einzelnen Kurse im DataCamp-Kursverzeichnis zuzugreifen. Allerdings schien die Lektion ohne Höhepunkt zu enden, weil wir nach der Beendigung der Parsing-Methoden nicht mehr mit dem Code gespielt haben.
Das Ziel dieser Aufgabe ist es, das zu ändern!
Der Code, den wir dir in dieser und der nächsten Aufgabe zeigen, ist sehr lang, denn wir haben die ganze Lektion gebraucht, um den Spider zu erstellen! Aber lass dich nicht einschüchtern! Der Sinn dieser beiden Aufgaben ist es, dir eine sehr einfache Aufgabe zu stellen, in der Hoffnung, dass du dir den Code für diesen Spider ansiehst und ausführst. Auf diese Weise hast du ihn im Griff, auch wenn er lang ist!
Diese Übung ist Teil des Kurses
Web Scraping in Python
Anleitung zur Übung
- Fülle die eine Lücke am Ende der
parse_pages
-Methoden aus, um die Titel der Kapitel dem Wörterbuch zuzuordnen, dessen Schlüssel der entsprechende Kurstitel ist.
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_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)