Парсер BeautifulSoup на tutortop.ru выдает ошибку

import requests
from bs4 import BeautifulSoup

url ='https://tutortop.ru/courses_category/programmirovanie/'
r = requests.get(url)
soup= BeautifulSoup (r.text, 'lxml')
courses = soup.findAll('div', class_='tab-course-item tab-course-item-bg')
print(len(courses))
data=[]
for course in courses:

    title = course.find('div', class_='m-course-title').text
    school = print(course.find('a', class_='course__col_school_name popup-course-link').text)
    try:
       rating = course.find('div', class_='course__wrap__box__top_rating rating_count_green').text
    except:
       rating = course.find('div', class_='course__wrap__box__top_rating rating_count_red').text
    price = course.find('div', class_='tab-course-col tab-course-col-flex tab-course-col-price initial-version').text
    duration = print(course.find('div', class_='tab-course-col tab-course-col-flex tab-course-col-dlitelnost initial-version').text
    data.append([title,school,rating,price,duration])

data

Друзья, подскажите, в чем ошибаюсь. Пишу парсер для сайта tutortop.ru. Выдает ошибку co строки scool title ищет и собирает нормально. При этом если пишу print(course.find(blabla).text) текст выводит. То есть в принципе текст в каждом классе находит. Но без print ругается, что мол, 'NoneType' object has no attribute 'text'


Ответы (1 шт):

Автор решения: Johan

Просто у найденного элемента нет атрибута. Если не изменять ваш код, то будет выглядеть примерно так:

import requests
from bs4 import BeautifulSoup

url = 'https://tutortop.ru/courses_category/programmirovanie/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
courses = soup.findAll('div', class_='tab-course-item tab-course-item-bg')
print(len(courses))

data = []
school = None
rating = None
price = None
duration = None

for course in courses:
    title = course.find('div', class_='m-course-title').text
    try:
        school = course.find('div', class_='course_box__top_school_header').\
            find('a', class_='course__col_school_name popup-course-link').text
    except AttributeError:
        pass
    try:
        rating = course.find('div', class_='course__wrap__box__top_rating rating_count_green').text
    except AttributeError:
        pass
    try:
        price = "".join((course.find('div', class_='tab-course-col tab-course-col-flex tab-course-col-price '
                                                   'initial-version').find_all('span')[1].text.split())).replace("₽", "")
    except AttributeError:
        pass
    try:
        duration = course.find('div',
                               class_='tab-course-col tab-course-col-flex tab-course-col-dlitelnost initial-version').\
            find('span').text
    except AttributeError:
        pass
    data.append([title, school, rating, price, duration])

print(data)
→ Ссылка