Добавлена документация для gpsa

This commit is contained in:
Ilia Miheev
2025-07-18 14:00:35 +03:00
parent b069c51605
commit 416ac28c17
+35 -35
View File
@@ -1,6 +1,6 @@
# Библиотека для работы с файлами во время парсинга # Библиотека для работы с файлами во время парсинга
Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач. Библиотека создавалась для удобства работы во время парсинга, но ничто не мешает использовать её просто для работы с json и csv. Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач. Библиотека создавалась для удобства работы во время парсинга, но ничто не мешает использовать её просто для работы с json, csv и прогресс-барами.
В библиотеке есть три класса для отдельных работ: Pars для работы с запросами и bs4, JsonManager для работы с json и CsvManager для работы с csv. Так же есть один класс для улучшения пользовательского опыта — ProgressBarManager, который создаёт прогресс-бар В библиотеке есть три класса для отдельных работ: Pars для работы с запросами и bs4, JsonManager для работы с json и CsvManager для работы с csv. Так же есть один класс для улучшения пользовательского опыта — ProgressBarManager, который создаёт прогресс-бар
@@ -26,55 +26,55 @@ p = Pars()
2. Метод **getDynamicPage** с помощью библиотеки Selenium получает динамически обновляемую страницу. Это помогает, когда контент на странице подгружается динамически. Принимает url страницы, путь сохранения, closeWindow и timeSleep. По умолчанию браузер Selenium открывается в фоновом режиме, и работу браузера не видно, но если closeWindow указать как False, то будет виден процесс выполнения кода. С помощью timeSleep можно увеличить время загрузки страницы если контент на ней долго подгружается 2. Метод **getDynamicPage** с помощью библиотеки Selenium получает динамически обновляемую страницу. Это помогает, когда контент на странице подгружается динамически. Принимает url страницы, путь сохранения, closeWindow и timeSleep. По умолчанию браузер Selenium открывается в фоновом режиме, и работу браузера не видно, но если closeWindow указать как False, то будет виден процесс выполнения кода. С помощью timeSleep можно увеличить время загрузки страницы если контент на ней долго подгружается
3. Метод **returnBs4Object** возвращает объект beautifulsoup4. Принимает путь до html-страницы, содержимое которой преобразует в объект beautifulsoup, кодировку открытия файла (по умолчанию UTF-8) и тип парсера (по умолчанию lxml). 3. Метод **gpsa** (get page semi-automatically) похож на метод getDynamicPage, но работает в полуавтоматическом режиме. Он открывает страницу сайта и ждёт пока не будет нажат Enter в терминале. В этот момент можно зарегистрироваться на сайте и/или перейти на нужную вкладку сайта, после чего нажать Enter и метод спарсит страницу. Подходит для лент соцсетей, где неавторизованным пользователям контент ограничен. Принисает такие же аргументы для таких же целей, что и getDynamicPage, за исключением closeWindow
4. Метод **getAttributes** нужена чтобы получить список атрибутов из списка объектов bs4. Принимает список объектов bs4 и название атрибута который будет извлекаться из элементов списка 4. Метод **returnBs4Object** возвращает объект beautifulsoup4. Принимает путь до html-страницы, содержимое которой преобразует в объект beautifulsoup, кодировку открытия файла (по умолчанию UTF-8) и тип парсера (по умолчанию lxml).
5. Метод **getTexts** нужена чтобы получить список текста из списка объектов bs4. Принимает список объектов bs4 и параметр needFix. Если этот параметр установлен как True, то из текста будут удалены \n, \t и пробелы с концов 5. Метод **getAttributes** нужена чтобы получить список атрибутов из списка объектов bs4. Принимает список объектов bs4 и название атрибута который будет извлекаться из элементов списка
6. Метод **pprint** используется для вывода значений переменных у которых большая вложеность. Например, если у Вас есть массив объектов, где в качестве значения ключа используется другой массив объектов 6. Метод **getTexts** нужена чтобы получить список текста из списка объектов bs4. Принимает список объектов bs4 и параметр needFix. Если этот параметр установлен как True, то из текста будут удалены \n, \t и пробелы с концов
7. Метод **mkdir** используется для создания папки с именем _nameDir_ если она ещё не существует 7. Метод **pprint** используется для вывода значений переменных у которых большая вложеность. Например, если у Вас есть массив объектов, где в качестве значения ключа используется другой массив объектов
Пример скачивания html-страницы: 8. Метод **mkdir** используется для создания папки с именем _nameDir_ если она ещё не существует
Пример парсера с использованием ipars:
```py ```py
from ipars import Pars # О классе ProgressBarManager читай ниже
from ipars import Pars, ProgressBarManager
p = Pars() p = Pars()
nameFile = 'index.html'
# Заголовки для запроса # Получаем html страницу
headers = { p.getDinamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=0)
"Accept": "*/*",
"User-Agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
}
p.getStaticPage('./index.html', 'https://google.com', headers=headers)
# Получаем объект beautifulsoup из полученной страницы # Получаем объект BautifullSoup
soup = p.returnBs4Object('./index.html') soup = p.returnBs4Object(nameFile)
# Используем методы beautifulsoup # Находим все карточки ответов
allImage = soup.find_all('img') # Первые результаты выдачи те что хотелось получить, а остальные нет. Поэтому нам желательно получить первые 84 элемента
print('-----начало-----') allCards = soup.find_all(class_='b_NgmZrVnRtV8MZMEjLs')[:84]
for image in allImage:
p.pprint(image.get('src'))
print('-----конец------')
``` # Получаем все изображения
allImg = [card.find('img') for card in allCards]
Пример скачивания фотографии: # Получаем все ссылки
allSrc = p.getAttributes(allImg, 'src')
```py # Создаём папку img если её ещё нет
from ipars import Pars nameFolder = 'img'
p = Pars() p.mkdir(nameFolder)
p.mkdir('img') # Создаём объект ProgressBarManager
# Получаем картинку bar = ProgressBarManager(len(allSrc))
p.getStaticPage(
pathToSaveFile="./img/logo.png", # Скачиваем картинки
# Возможно в будущем, эта картинка переместится в другое место и пример перестанет работать 👉👈 for index, url in enumerate(allSrc):
url="https://cdn.sstatic.net/Sites/stackoverflow/Img/icon-48.png?v=b7e36f88ff92", url = 'https:' + url
writeMethod='wb' p.getStaticPage(f'./{nameFolder}/img{index}.png', url, writeMethod='wb')
) bar.next()
bar.finish()
``` ```
Пример использование методов _getAttributes_ и _getTexts_ Пример использование методов _getAttributes_ и _getTexts_