diff --git a/README.md b/README.md index 0e88ce7..acc684d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Библиотека для работы с файлами во время парсинга -Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач. Библиотека создавалась для удобства работы во время парсинга, но ничто не мешает использовать её просто для работы с json и csv. +Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач. Библиотека создавалась для удобства работы во время парсинга, но ничто не мешает использовать её просто для работы с json, csv и прогресс-барами. В библиотеке есть три класса для отдельных работ: Pars для работы с запросами и bs4, JsonManager для работы с json и CsvManager для работы с csv. Так же есть один класс для улучшения пользовательского опыта — ProgressBarManager, который создаёт прогресс-бар @@ -26,55 +26,55 @@ p = Pars() 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 -from ipars import Pars +# О классе ProgressBarManager читай ниже +from ipars import Pars, ProgressBarManager p = Pars() +nameFile = 'index.html' -# Заголовки для запроса -headers = { - "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) +# Получаем html страницу +p.getDinamicPage(nameFile, 'https://duckduckgo.com/?q=теплица+социальных+технологий+youtube&iar=videos&atb=v454-1', closeWindow=0) -# Получаем объект beautifulsoup из полученной страницы -soup = p.returnBs4Object('./index.html') +# Получаем объект BautifullSoup +soup = p.returnBs4Object(nameFile) -# Используем методы beautifulsoup -allImage = soup.find_all('img') -print('-----начало-----') -for image in allImage: - p.pprint(image.get('src')) -print('-----конец------') +# Находим все карточки ответов +# Первые результаты выдачи те что хотелось получить, а остальные нет. Поэтому нам желательно получить первые 84 элемента +allCards = soup.find_all(class_='b_NgmZrVnRtV8MZMEjLs')[:84] -``` +# Получаем все изображения +allImg = [card.find('img') for card in allCards] -Пример скачивания фотографии: +# Получаем все ссылки +allSrc = p.getAttributes(allImg, 'src') -```py -from ipars import Pars -p = Pars() +# Создаём папку img если её ещё нет +nameFolder = 'img' +p.mkdir(nameFolder) -p.mkdir('img') -# Получаем картинку -p.getStaticPage( - pathToSaveFile="./img/logo.png", - # Возможно в будущем, эта картинка переместится в другое место и пример перестанет работать 👉👈 - url="https://cdn.sstatic.net/Sites/stackoverflow/Img/icon-48.png?v=b7e36f88ff92", - writeMethod='wb' -) +# Создаём объект 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() ``` Пример использование методов _getAttributes_ и _getTexts_