Čas to spustit
V poslední lekci jsme společně vytvořili celý webový crawler pro přístup k informacím o kurzech z katalogu kurzů DataCampu. Lekce ale skončila trochu bez vyvrcholení, protože jsme si s kódem nehráli ani po dokončení metod pro parsování.
Toto cvičení to napravuje!
Kód, který tu najdeš, je delší — je to celý spider, jehož vytvoření nám zabralo celou lekci. Nenech se tím ale odradit! Cílem těchto dvou cvičení je zadat ti velmi jednoduchý úkol, přičemž doufáme, že si kód tohoto spidera prohlédneš a spustíš. Díky tomu ho pochopíš i přes jeho délku!
Toto cvičení je součástí kurzu
Web Scraping v Pythonu
Pokyny k cvičení
- Doplň jediné prázdné místo na konci metody
parse_pagestak, aby se názvy kapitol přiřadily do slovníku pod klíčem odpovídajícího názvu kurzu.
POZNÁMKA: Pokud klikneš na Spustit kód, musíš před dalším spuštěním nejprve použít Obnovit ukázkový kód!
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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)