Ejemplo n.º 1
0
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)