Час запускати
У попередньому уроці ми повністю створили вебскрейпер, щоб отримувати інформацію про курси з каталогу курсів DataCamp. Однак урок обірвався без розв'язки, бо після завершення методів парсингу ми не спробували код у дії.
Мета цієї вправи — це виправити!
Код, який ви побачите тут і в наступній вправі, довгий, адже це весь spider, який ми створювали протягом уроку! Але не лякайтесь! Завдання цих двох вправ — дати вам дуже просту дію, щоб ви переглянули та запустили код цього spiderʼа. Так ви відчуєте його структуру, навіть якщо він довгий!
Ця вправа є частиною курсу
Вебскрапінг у Python
Інструкції до вправи
- Заповніть єдиний пропуск наприкінці методу
parse_pages, щоб присвоїти заголовки розділів словнику, ключем якого є відповідна назва курсу.
ПРИМІТКА: Якщо ви натиснете "Запустити код", вам потрібно "Повернутися до зразка коду", щоб знову успішно скористатися "Запустити код"!!
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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)