Парсер 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)