Изменены названия классов и улучшена работа функции get_static_page

This commit is contained in:
Ilia Miheev
2025-05-03 16:02:16 +03:00
parent cef0c721d5
commit ed99931dc2
+16 -21
View File
@@ -1,15 +1,15 @@
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from requests import get, RequestException import requests
from selenium import webdriver from selenium import webdriver
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from time import sleep from time import sleep
import json import json
import csv import csv
class WorkWithScv: class CsvManager:
'''Класс для работы с csv файлами во время парсинга''' '''Класс для работы с 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.newline = newline
self.encoding = encoding self.encoding = encoding
@@ -39,21 +39,21 @@ class WorkWithScv:
return userRows return userRows
class WorkWithJson: class JsonManager:
'''Модуль для работы с json файлами''' '''Модуль для работы с json файлами'''
def __init__(self, encoding:str='utf8'): def __init__(self, encoding:str='utf8'):
self.encoding = encoding self.encoding = encoding
def load(self, pathToJsonFile:str): def load(self, pathToJsonFile:str):
"""Получаем данные из json файла""" '''Получаем данные из json файла'''
with open(pathToJsonFile, encoding=self.encoding) as jsonFile: with open(pathToJsonFile, encoding=self.encoding) as jsonFile:
src = json.load(jsonFile) src = json.load(jsonFile)
return src return src
def dump(self, pathToJsonFile:str, data:any): def dump(self, pathToJsonFile:str, data:any):
"""Записываем данные в json файл""" '''Записываем данные в json файл'''
with open(pathToJsonFile, 'w', encoding=self.encoding) as jsonFile: with open(pathToJsonFile, 'w', encoding=self.encoding) as jsonFile:
json.dump(data, jsonFile, indent=4, ensure_ascii=0) json.dump(data, jsonFile, indent=4, ensure_ascii=0)
@@ -62,17 +62,17 @@ class Pars:
'''Модуль для работы с запросами и HTML файлами во время парсинга''' '''Модуль для работы с запросами и HTML файлами во время парсинга'''
def returnBs4Object(self, pathToFile, myEncoding:str='utf8', parser:str='lxml'): def returnBs4Object(self, pathToFile, myEncoding:str='utf8', parser:str='lxml'):
"""Возвращаем объект beautifulsoup""" '''Возвращаем объект beautifulsoup'''
with open(pathToFile, encoding=myEncoding) as file: with open(pathToFile, encoding=myEncoding) as file:
src = file.read() src = file.read()
soup = BeautifulSoup(src, parser) soup = BeautifulSoup(src, parser)
return soup 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 == '': if headers is None:
headers = { headers = {
"Accept": "*/*", "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" "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"
@@ -80,8 +80,7 @@ class Pars:
try: try:
# Отправляем запрос # Отправляем запрос
req = get(url, headers=headers) req = requests.get(url, headers=headers)
req.raise_for_status() # Проверка на ошибки HTTP
# Записываем данные # Записываем данные
if writeMethod == 'w': if writeMethod == 'w':
@@ -95,16 +94,12 @@ class Pars:
else: else:
raise ValueError(f"Неподдерживаемый метод записи: {writeMethod}") raise ValueError(f"Неподдерживаемый метод записи: {writeMethod}")
# Обрабатываем ошибки return req.status_code # Возвращаем статус ответа от сервера
except RequestException as e:
return req.status_code
except IOError as e:
print(f"Ошибка при записи в файл: {e}")
except Exception as e:
return e
# Если всё выполнилось хорошо, то возвращаем статус 200 except requests.exceptions.HTTPError as http_err:
return 200 raise RuntimeError(f"HTTP ошибка: {http_err}") from http_err
except Exception as e:
raise RuntimeError(e) from e
def get_dinamic_page(self, url, pathToSaveFile, closeWindow:bool=1) -> None: def get_dinamic_page(self, url, pathToSaveFile, closeWindow:bool=1) -> None: