実行してみましょう
前のレッスンでは、DataCamp のコースディレクトリにある各コースから情報を取得する、完全なウェブクローラーを一から作成しました。ただ、パースの実装が終わったあとにコードで遊ぶ時間がなく、盛り上がりに欠けたまま終わってしまったように感じたかもしれません。
この演習は、その物足りなさを解消するためのものです!
この演習と次の演習でお見せするコードは長いですが、レッスンで作り上げたスパイダー全体だからです!とはいえ、身構えないでください。これら2つの演習の目的は、みなさんにこのスパイダーのコードを眺めて実行してもらうことを念頭に、完了が「とても」簡単なタスクを用意することにあります。コードが長くても、触って動かすことで全体像がつかめます!
この演習はコースの一部です
Pythonで学ぶWebスクレイピング
演習の手順
parse_pagesメソッドの末尾にある1つの空欄を埋め、章のタイトルを、対応するコースタイトルをキーとする辞書に代入してください。
注意: 「コードを実行する」を押した場合、もう一度正常に「コードを実行する」を使うには「サンプルコードにリセット」が必要です!
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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)