이제 실행해 볼 시간
지난 레슨에서는 DataCamp 강의 디렉터리의 각 강의에서 강의 정보를 가져오기 위해, 전체 웹 크롤러를 처음부터 끝까지 만들어 봤어요. 하지만 파싱 메서드를 마친 뒤 코드를 직접 다뤄 보지 않아서, 클라이맥스 없이 끝난 느낌이었죠.
이번 연습 문제의 목적은 바로 그 부분을 보완하는 거예요!
이번과 다음 연습 문제에서 살펴볼 코드는 길어요. 그 시간 동안 함께 만든 전체 스파이더 코드이기 때문이죠! 하지만 겁먹지 마세요! 이 두 문제의 핵심은 여러분이 이 스파이더의 코드를 직접 보고 실행해 보도록, 아주 쉬운 작업을 드리는 데 있어요. 코드가 길더라도 직접 실행해 보면 전체 흐름을 충분히 이해하실 수 있을 거예요!
이 연습은 강의의 일부입니다
Python으로 하는 웹 스크레이핑
연습 안내
parse_pages메서드의 마지막에 있는 한 줄 빈칸을 채워, 해당 강의 제목을 키로 갖는 딕셔너리에 장 제목들을 할당하세요.
NOTE: "코드 실행"을 누른 경우, 다시 성공적으로 "코드 실행"을 사용하려면 반드시 "샘플 코드로 초기화"를 하셔야 해요!!
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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)