Reputation: 55
Im trying to scrape the rating of a course in udemy. For example: https://www.udemy.com/course/the-modern-cpp-20-masterclass/ Sadly, I am getting a syntax error in my find line. Waiting for you help :)
import time
import os
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import scipy as sc
import numpy as np
import requests
url = "https://www.udemy.com/course/the-modern-cpp-20-masterclass/"
page = requests.get(url)
soup = BeautifulSoup(page.content,'html.parser')
#<span class="udlite-heading-sm star-rating--rating-number--2o8YM" aria-hidden="true" data-purpose="rating-number">4.7</span>course_rating_avarage = soup.find('div', {"class" : udlite-sr-only})
course_rating_avarage = soup.find('span', {"class" : udlite-heading-sm star-rating--rating-number--2o8YM})
course_rating_avarage_text = course_rating_avarage.string
print (course_rating_avarage_text)
Upvotes: 0
Views: 59
Reputation: 55
So, I fixed it by edditing the course_rating_avarage field:
course_rating_avarage = soup.find('span', {"class" : 'udlite-heading-sm star-rating--rating-number--2o8YM'})
Upvotes: 1
Reputation: 23738
The argument in soup.find()
must be quoted as a string.
import bs4
from bs4 import BeautifulSoup
import requests
url = "https://www.udemy.com/course/the-modern-cpp-20-masterclass/"
page = requests.get(url)
soup = BeautifulSoup(page.content,'html.parser')
course_rating_avarage = soup.find('span', {"class" : "udlite-heading-sm star-rating--rating-number--2o8YM"})
# ^ quote the value above
course_rating_avarage_text = course_rating_avarage.string
print (course_rating_avarage_text)
4.7
Class types can change over time so it would be better to look for the 'rating-number' value in the data-purpose
attribute.
course_rating_avarage = soup.find('span', {"data-purpose" : "rating-number"})
Upvotes: 1