Descrições do DataCamp
Assim como no exercício anterior, o código aqui é longo, pois você está trabalhando com um spider inteiro que rastreia a web! Mas, novamente, não deixe que a quantidade de código o intimide, pois você já sabe como os spiders funcionam e é perfeitamente capaz de concluir a tarefa fácil que lhe foi apresentada aqui!
Assim como no exercício anterior, criamos uma função chamada previewCourses
que permite visualizar a saída do spider, mas você também pode explorar o dicionário dc_dict
a qualquer momento depois de executar o código.
Neste exercício, você deve criar uma string de um localizador CSS diretamente para o texto da descrição do curso. Tudo o que você precisa saber é que, na página do curso, o texto de descrição do curso fica dentro de um elemento de parágrafo p
que pertence à classe course__description
(com dois sublinhados).
Este exercício faz parte do curso
Raspagem da Web em Python
Instruções de exercício
- Preencha o espaço em branco abaixo no método
parse_pages
com uma string de um localizador CSS que direcione para o texto no elemento de parágrafop
que pertence à classecourse__description
.
OBSERVAÇÃO: se você clicar em “Executar código”, será necessário voltar para o código de exemplo para usar “Executar código” novamente!
Exercício interativo prático
Experimente este exercício preenchendo este código de exemplo.
# 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)