Descrizioni di DataCamp
Come nell'esercizio precedente, il codice qui è lungo perché stai lavorando con un intero spider di web crawling! Ma non farti intimidire dalla quantità di codice: ormai hai capito come funzionano gli spider e sei perfettamente in grado di portare a termine il semplice compito che ti chiediamo qui!
Come nell'esercizio precedente, abbiamo creato una funzione previewCourses che ti permette di visualizzare in anteprima l'output dello spider, ma puoi sempre esplorare anche il dizionario dc_dict dopo aver eseguito il codice.
In questo esercizio, ti viene chiesto di creare una stringa CSS Locator che punti direttamente al testo della descrizione del corso. Tutto ciò che devi sapere è che, nella pagina del corso, il testo della descrizione è dentro un elemento paragrafo p che appartiene alla classe course__description (due trattini bassi).
Questo esercizio fa parte del corso
Web Scraping in Python
Istruzioni dell'esercizio
- Completa l'unico spazio vuoto qui sotto nel metodo
parse_pagescon una stringa CSS Locator che punti al testo all'interno dell'elemento paragrafopche appartiene alla classecourse__description.
NOTA: Se premi Esegui codice, devi Reimposta il codice di esempio per poter usare di nuovo Esegui codice con successo!!
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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)