From 989ac189d2426615f174a9e0ef0dd08cb3e704aa Mon Sep 17 00:00:00 2001 From: Ilia Miheev Date: Thu, 13 Nov 2025 15:30:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=91?= =?UTF-8?q?=D0=BD=D0=BD=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0=20=D1=81=20Pars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/en/Pars_EN.md | 63 ++++++++++++++++++++++------------------ pages/ru/Pars_RU.md | 71 +++++++++++++++++++++++++++------------------ 2 files changed, 78 insertions(+), 56 deletions(-) diff --git a/pages/en/Pars_EN.md b/pages/en/Pars_EN.md index 8e60057..82b0a70 100644 --- a/pages/en/Pars_EN.md +++ b/pages/en/Pars_EN.md @@ -34,43 +34,50 @@ for index, url in enumerate(urlList): - The **mkdir** method is used to create a folder with the name _nameDir_ if it does not already exist. -### Example Parser Using ipars: +### Example Using the Pars Class: ```py # About the ProgressBarManager class, read below from ipars import Pars, ProgressBarManager p = Pars() nameFile = 'index.html' - -# Getting the HTML page -p.getDynamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=0) - -# Getting the BeautifulSoup Object -soup = p.returnBs4Object(nameFile) - -# Finding all answer cards -# The first results are what we wanted, and the rest are not. Therefore, we prefer to get the first 84 elements -allCards = soup.find*all(class*='b_NgmZrVnRtV8MZMEjLs')[:84] - -# Getting all images -allImg = [card.find('img') for card in allCards] - -# Getting all links -allSrc = p.getAttributes(allImg, 'src') - -# Creating a folder img if it does not already exist nameFolder = 'img' -p.mkdir(nameFolder) -# Creating a ProgressBarManager object -bar = ProgressBarManager(len(allSrc)) + # Getting the HTML page + p.getDynamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=False, timeSleep=5) -# Downloading images -for index, url in enumerate(allSrc): -url = 'https:' + url -p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb') -bar.next() -bar.finish() + # Getting the BeautifulSoup Object + soup = p.returnBs4Object(nameFile) + + # Finding all answer cards + # The first results are what we wanted, and the rest are not. Therefore, we prefer to get the first 84 elements + locator = 'b_NgmZrVnRtV8MZMEjLs' + allCards = soup.find_all(class_=locator)[:84] + + # Getting all images + allImg = [card.find('img') for card in allCards] + + # Getting all links + allSrc = p.getAttributes(allImg, 'src') + + # Creating a folder img if it does not already exist + p.mkdir(nameFolder) + + # Creating a ProgressBarManager object + bar = ProgressBarManager(len(allSrc)) + + # Downloading images + for index, url in enumerate(allSrc): + url = 'https:' + url + p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb') + bar.next() + bar.finish() + + # Let's see what appeared in the img folder + p.pprint(p.listdir(nameFolder)) + +if __name__=='__main__': + main() ``` ### Example Usage of _getAttributes_ and _getTexts_ Methods diff --git a/pages/ru/Pars_RU.md b/pages/ru/Pars_RU.md index 752d87a..4e732fd 100644 --- a/pages/ru/Pars_RU.md +++ b/pages/ru/Pars_RU.md @@ -34,43 +34,58 @@ for index, url in enumerate(urlList): - Метод **mkdir** используется для создания папки с именем _nameDir_ если она ещё не существует -### Пример парсера с использованием ipars: +- Метод **listdir** используется для получения списка файлов в указанной папке + +### Пример использования класса Pars: ```py # О классе ProgressBarManager читай ниже from ipars import Pars, ProgressBarManager p = Pars() nameFile = 'index.html' - -# Получаем html страницу -p.getDynamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=0) - -# Получаем объект BautifullSoup -soup = p.returnBs4Object(nameFile) - -# Находим все карточки ответов -# Первые результаты выдачи те что хотелось получить, а остальные нет. Поэтому нам желательно получить первые 84 элемента -allCards = soup.find_all(class_='b_NgmZrVnRtV8MZMEjLs')[:84] - -# Получаем все изображения -allImg = [card.find('img') for card in allCards] - -# Получаем все ссылки -allSrc = p.getAttributes(allImg, 'src') - -# Создаём папку img если её ещё нет nameFolder = 'img' -p.mkdir(nameFolder) -# Создаём объект ProgressBarManager -bar = ProgressBarManager(len(allSrc)) +def main(): + # Получаем html страницу + p.getDynamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=False, timeSleep=5) -# Скачиваем картинки -for index, url in enumerate(allSrc): - url = 'https:' + url - p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb') - bar.next() -bar.finish() + # Получаем объект BautifullSoup + soup = p.returnBs4Object(nameFile) + + # Находим все карточки ответов + # Первые результаты выдачи те что хотелось получить, а остальные нет. Поэтому нам желательно получить первые 84 элемента + locator = 'b_NgmZrVnRtV8MZMEjLs' + allCards = soup.find_all(class_=locator)[:84] + if len(allCards) == 0: + print(f'''Something went wrong. Here is a list of possible causes: + 1) DuckDuckGo has changed the class for video cards. The code uses the locator "{locator}" + 2) The site did not load. Try increasing the timeSleep parameter or make a request later.''') + return + + # Получаем все изображения + allImg = [card.find('img') for card in allCards] + + # Получаем все ссылки + allSrc = p.getAttributes(allImg, 'src') + + # Создаём папку img если её ещё нет + p.mkdir(nameFolder) + + # Создаём объект ProgressBarManager + bar = ProgressBarManager(len(allSrc)) + + # Скачиваем картинки + for index, url in enumerate(allSrc): + url = 'https:' + url + p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb') + bar.next() + bar.finish() + + # Смотрим что появилось в папке img + p.pprint(p.listdir(nameFolder)) + +if __name__=='__main__': + main() ``` ### Пример использования методов _getAttributes_ и _getTexts_