DataCamp-beskrivningar
Precis som i förra övningen är koden här lång, eftersom du arbetar med en hel webbcrawlande spindel! Men låt inte mängden kod skrämma dig – du har nu en god förståelse för hur spindlar fungerar och kan utan problem lösa den enkla uppgiften här!
Precis som i föregående övning har vi skapat en funktion previewCourses som låter dig förhandsgranska spindelns utdata, men du kan också utforska ordboken dc_dict direkt efter att du kört koden.
I den här övningen ska du skapa en CSS-selektor-sträng som pekar direkt till texten i kursbeskrivningen. Det enda du behöver veta är att kursbeskrivningstexten på kurssidan finns i ett stycke-element p som tillhör klassen course__description (två understreck).
Den här övningen är en del av kursen
Webbskrapning i Python
Övningsinstruktioner
- Fyll i det tomma stället i metoden
parse_pagesmed en CSS-selektor-sträng som pekar till texten i stycke-elementetpsom tillhör klassencourse__description.
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_Description_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):
# Create a SelectorList of the course titles text
crs_title = response.xpath('//h1[contains(@class,"title")]/text()')
# Extract the text and strip it clean
crs_title_ext = crs_title.extract_first().strip()
# Create a SelectorList of course descriptions text
crs_descr = response.css( ____ )
# Extract the text and strip it clean
crs_descr_ext = crs_descr.extract_first().strip()
# Fill in the dictionary
dc_dict[crs_title_ext] = crs_descr_ext
# Initialize the dictionary **outside** of the Spider class
dc_dict = dict()
# Run the Spider
process = CrawlerProcess()
process.crawl(DC_Description_Spider)
process.start()
# Print a preview of courses
previewCourses(dc_dict)