Đến lúc chạy thử
Trong bài học trước, bạn đã tạo trọn vẹn một web-crawler để lấy thông tin khóa học từ từng khóa trong thư mục khóa học của DataCamp. Tuy nhiên, bài học có vẻ kết thúc hơi lửng vì chúng ta chưa chạy thử mã sau khi hoàn thành các phương thức phân tích cú pháp.
Bài tập này nhằm khắc phục điều đó!
Đoạn mã bạn xem trong bài này và bài kế tiếp khá dài, vì đó là toàn bộ spider mà chúng ta đã xây dựng trong bài học! Nhưng đừng ngại! Mục tiêu của hai bài tập này là giao cho bạn một nhiệm vụ rất đơn giản, với kỳ vọng bạn sẽ xem và chạy spider này. Nhờ vậy, dù mã dài, bạn vẫn nắm bắt được nó!
Bài tập này là một phần của khóa học
Web Scraping với Python
Hướng dẫn bài tập
- Điền một chỗ trống ở cuối phương thức
parse_pagesđể gán danh sách tiêu đề chương vào từ điển có khóa là tiêu đề khóa học tương ứng.
LƯU Ý: Nếu bạn bấm Chạy mã, bạn phải Đặt lại về mã mẫu thì mới có thể dùng Chạy mã lần nữa thành công!!
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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)