Dags att köra
I den förra lektionen gick vi igenom hur man skapar en komplett webbcrawler för att hämta kursinformation från varje kurs i DataCamps kurskatalog. Lektionen avslutades dock utan någon riktig avslutning, eftersom vi inte testade koden efter att ha skrivit klart parsningsmetoderna.
Den här övningen rättar till det!
Koden du får titta på i den här och nästa övning är lång – det är ju hela den spider vi byggde under lektionen! Men låt dig inte skrämmas! Poängen med de här två övningarna är att ge dig en mycket enkel uppgift att lösa, med förhoppningen att du ska läsa igenom och köra koden för den här spindeln. På så sätt får du en god förståelse för den, trots att den är lång!
Den här övningen är en del av kursen
Webbskrapning i Python
Övningsinstruktioner
- Fyll i det enda tomrummet i slutet av metoden
parse_pagesför att tilldela kapiteltitlarna till den dictionary vars nyckel är motsvarande kurstitel.
OBS: Om du klickar på Kör koden måste du använda Återställ till exempelkod för att kunna köra koden igen!
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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)