def get_galleries_data(filename: str): # Если имя g_fileа не оканчивается на html, делаем так, чтобы оканчивалось filename += '.html' if not filename.endswith('.html') else '' # Открываем g_file с html на чтение и получаем из него данные with open(filename, 'r', encoding='UTF-8') as file: html_data = file.read() # Преобразовываем данные в объект soup = BeautifulSoup(html_data, 'lxml') # Получаем список всех карточек на странице galleries = soup.find_all('div', class_='card-gallery-desktop-view') # Проходимся по всем карточкам... for gallery in reversed(galleries): # С помощью специального селектора выбираем необходимые нам данные (ссылки на галереи) main_data = gallery.find('a', class_='card-gallery-base__clickable') try: # С помощью специального селектора выбираем необходимые нам данные (ссылку) g_url = remove_trash(main_data.get('href')) except AttributeError: # Если карточка не содержит нужных нам данных, то это не статья и мы такое пропускаем continue # С помощью ключевого слова yield мы возвращаем не сразу весь список, а элементы по очереди (оптимизация) # Здесь мы превращаем три наши переменные в объект Card, описанный выше ### yield g_Card(g_url, img_url) yield g_Card(g_url)
def get_page_data(filename: str): # Если имя g_fileа не оканчивается на html, делаем так, чтобы оканчивалось filename += '.html' if not filename.endswith('.html') else '' # Открываем g_file с html на чтение и получаем из него данные with open(filename, 'r', encoding='UTF-8') as file: html_data = file.read() # Преобразовываем данные в объект soup = BeautifulSoup(html_data, 'lxml') # Получаем список всех карточек на странице #cards = soup.find_all('div', class_='card-wrapper') cards = soup.find_all('div', attrs={'class': 'card-image-2-view__content'}) # Проходимся по всем карточкам... for card in reversed(cards): # С помощью специального селектора выбираем необходимые нам данные (название и ссылка, верхний блок карточки) #main_data = card.find('a', class_='card-image-view-by-metrics__clickable') or card.find('a', class_='card-text-view__clickable') main_data = card.find('a', attrs={'class': 'card-image-2-view__clickable'}) try: # С помощью специального селектора выбираем необходимые нам данные (название) title = main_data.get('aria-label') # С помощью специального селектора выбираем необходимые нам данные (ссылка) link = remove_trash(main_data.get('href')) except AttributeError: # Если карточка не содержит нужных нам данных, то это не статья и мы такое пропускаем continue try: # С помощью специального селектора выбираем необходимые нам данные (описание) desc = del_space( card.find('div', attrs={ 'class': 'line-clamp _clamped' }).text) except AttributeError: # Если данных нет (описание есть не везде), записываем "пустоту" desc = None # С помощью ключевого слова yield мы возвращаем не сразу весь список, а элементы по очереди (оптимизация) # Здесь мы превращаем три наши переменные в объект Cards, описанный выше yield Cards(title, desc, link)
def get_galleries_data(filename: str): # Если имя g_fileа не оканчивается на html, делаем так, чтобы оканчивалось filename += '.html' if not filename.endswith('.html') else '' # Открываем g_file с html на чтение и получаем из него данные with open(filename, 'r', encoding='UTF-8') as file: html_data = file.read() # Преобразовываем данные в объект soup = BeautifulSoup(html_data, 'lxml') # Получаем список всех карточек на странице #galleries = soup.find_all('div', class_='card-gallery-desktop-view') galleries = soup.find_all( 'div', attrs={'class': 'card-gallery-base-2 _type_carousel _with-animations'}) # Проходимся по всем карточкам... for gallery in reversed(galleries): # С помощью специального селектора выбираем необходимые нам данные (ссылки на галереи) #main_data = gallery.find('a', attrs={'class': 'card-block-social-meta-view _theme_white'}) try: # С помощью специального селектора выбираем необходимые нам данные (ссылку) url = remove_trash( gallery.find('a', attrs={ 'class': 'card-carousel-image-item-2__clickable' }).get('href')) #img = gallery.find_all('img', attrs={'class': 'card-carousel-image-item-2__image'}).get('src') img = gallery.find_all( 'div', attrs={'class': 'card-carousel-image-item-2__wrapper'}) images = [] for i in img: i = i.find('img').get('src') images.append(i) except AttributeError: # Если карточка не содержит нужных нам данных, то это не статья и мы такое пропускаем continue # С помощью ключевого слова yield мы возвращаем не сразу весь список, а элементы по очереди (оптимизация) # Здесь мы превращаем три наши переменные в объект Card, описанный выше yield Galleries(url, images)