From ed99931dc2f582d693e11c85680c8384116666e2 Mon Sep 17 00:00:00 2001 From: Ilia Miheev Date: Sat, 3 May 2025 16:02:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D0=B8=20=D1=83?= =?UTF-8?q?=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= =?UTF-8?q?=20get=5Fstatic=5Fpage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ipars/module.py | 41 ++++++++++++++++++----------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/ipars/module.py b/ipars/module.py index 032c8d9..b1c7806 100644 --- a/ipars/module.py +++ b/ipars/module.py @@ -1,15 +1,15 @@ from selenium.webdriver.chrome.options import Options -from requests import get, RequestException +import requests from selenium import webdriver from bs4 import BeautifulSoup from time import sleep import json import csv -class WorkWithScv: +class CsvManager: '''Класс для работы с csv файлами во время парсинга''' - def __init__(self, newline:str='', encoding:str='cp1251', delimiter:str=';'): + def __init__(self, newline:str='', encoding:str='utf8', delimiter:str=';'): '''Конструктор''' self.newline = newline self.encoding = encoding @@ -39,21 +39,21 @@ class WorkWithScv: return userRows -class WorkWithJson: +class JsonManager: '''Модуль для работы с json файлами''' def __init__(self, encoding:str='utf8'): self.encoding = encoding def load(self, pathToJsonFile:str): - """Получаем данные из json файла""" + '''Получаем данные из json файла''' with open(pathToJsonFile, encoding=self.encoding) as jsonFile: src = json.load(jsonFile) return src def dump(self, pathToJsonFile:str, data:any): - """Записываем данные в json файл""" + '''Записываем данные в json файл''' with open(pathToJsonFile, 'w', encoding=self.encoding) as jsonFile: json.dump(data, jsonFile, indent=4, ensure_ascii=0) @@ -62,26 +62,25 @@ class Pars: '''Модуль для работы с запросами и HTML файлами во время парсинга''' def returnBs4Object(self, pathToFile, myEncoding:str='utf8', parser:str='lxml'): - """Возвращаем объект beautifulsoup""" + '''Возвращаем объект beautifulsoup''' with open(pathToFile, encoding=myEncoding) as file: src = file.read() soup = BeautifulSoup(src, parser) return soup - def get_static_page(self, pathToSaveFile, url, writeMethod='w', headers:dict='')-> int(): - '''Получаем статическую страницу''' + def get_static_page(self, pathToSaveFile, url, writeMethod='w', headers: dict = None) -> int: + '''Получаем статическую страницу и возвращаем статус ответа от сервера''' - if headers == '': - headers ={ + if headers is None: + 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" - } + } try: # Отправляем запрос - req = get(url, headers=headers) - req.raise_for_status() # Проверка на ошибки HTTP + req = requests.get(url, headers=headers) # Записываем данные if writeMethod == 'w': @@ -95,16 +94,12 @@ class Pars: else: raise ValueError(f"Неподдерживаемый метод записи: {writeMethod}") - # Обрабатываем ошибки - except RequestException as e: - return req.status_code - except IOError as e: - print(f"Ошибка при записи в файл: {e}") + return req.status_code # Возвращаем статус ответа от сервера + + except requests.exceptions.HTTPError as http_err: + raise RuntimeError(f"HTTP ошибка: {http_err}") from http_err except Exception as e: - return e - - # Если всё выполнилось хорошо, то возвращаем статус 200 - return 200 + raise RuntimeError(e) from e def get_dinamic_page(self, url, pathToSaveFile, closeWindow:bool=1) -> None: