Убран конструктор для корректной работы приложения и созданы методы для работы с json

This commit is contained in:
Ilia Miheev
2025-04-29 00:03:40 +03:00
parent 38bd6441f7
commit 1236083bf1
+26 -31
View File
@@ -1,22 +1,13 @@
from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.options import Options
from requests import get, RequestException from requests import get, RequestException
from selenium import webdriver from selenium import webdriver
from time import sleep
from os import remove
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from time import sleep
import json import json
class Pars: class Pars:
'''Библиотека для работы с файлами во время парсинга''' '''Библиотека для работы с файлами во время парсинга'''
def __init__(self, url, pathToSaveFile, writeMethod='w'):
"""Конструктор"""
self.url = url
self.pathToSaveFile = pathToSaveFile
self.writeMethod = writeMethod
def loadJson(self, pathToJsonFile:str): def loadJson(self, pathToJsonFile:str):
"""Получаем данные из json файла""" """Получаем данные из json файла"""
with open(pathToJsonFile) as jsonFile: with open(pathToJsonFile) as jsonFile:
@@ -26,53 +17,57 @@ class Pars:
def dumpJson(self, data:any, pathToJsonFile:str): def dumpJson(self, data:any, pathToJsonFile:str):
"""Записываем данные в json файл""" """Записываем данные в json файл"""
with open(pathToJsonFile, 'w') as jsonFile: with open(pathToJsonFile, 'w', encoding='utf8') as jsonFile:
json.dump(data, jsonFile, indent=4, ensure_ascii=0) json.dump(data, jsonFile, indent=4, ensure_ascii=0)
def returnBs4Object(self, myEncoding:str='utf8', parser:str='lxml'): def returnBs4Object(self, pathToFile, myEncoding:str='utf8', parser:str='lxml'):
"""Возвращаем объект beautifulsoup""" """Возвращаем объект beautifulsoup"""
with open(self.pathToSaveFile, 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 deleteFile(self): def get_static_page(self, url, pathToSaveFile, writeMethod='w', headers:dict='')-> int():
"""Удаляем файл после работы с ним"""
remove(self.pathToSaveFile)
def get_static_page(self, headers:dict):
'''Получаем статическую страницу''' '''Получаем статическую страницу'''
if headers == '':
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: try:
# Отправляем запрос # Отправляем запрос
req = get(self.url, headers=headers) req = get(url, headers=headers)
req.raise_for_status() # Проверка на ошибки HTTP req.raise_for_status() # Проверка на ошибки HTTP
# Записываем данные # Записываем данные
if self.writeMethod == 'w': if writeMethod == 'w':
src = req.text src = req.text
with open(self.pathToSaveFile, self.writeMethod, encoding='utf-8') as file: with open(pathToSaveFile, 'w', encoding='utf-8') as file:
file.write(src) file.write(src)
elif self.writeMethod == 'wb': elif writeMethod == 'wb':
src = req.content src = req.content
with open(self.pathToSaveFile, self.writeMethod) as file: with open(pathToSaveFile, 'wb') as file:
file.write(src) file.write(src)
else: else:
raise ValueError("Неподдерживаемый метод записи: {}".format(self.writeMethod)) raise ValueError(f"Неподдерживаемый метод записи: {writeMethod}")
# Обрабатываем ошибки # Обрабатываем ошибки
except RequestException as e: except RequestException as e:
print(f"Ошибка при запросе: {e}") return req.status_code
except IOError as e: except IOError as e:
print(f"Ошибка при записи в файл: {e}") print(f"Ошибка при записи в файл: {e}")
except Exception as e: except Exception as e:
print('Ошибка:') return e
print(e)
# Если всё выполнилось хорошо, то возвращаем статус 200
return 200
def get_dinamic_page(self, closeWindow:bool=1): def get_dinamic_page(self, url, pathToSaveFile, closeWindow:bool=1) -> None:
'''Получаем динамическую страницу''' '''Получаем динамическую страницу'''
# Устанавливаем опции для Chrome WebDriver # Устанавливаем опции для Chrome WebDriver
@@ -82,7 +77,7 @@ class Pars:
# открываем браузер # открываем браузер
with webdriver.Chrome(options=options) as driver: with webdriver.Chrome(options=options) as driver:
driver.get(self.url) driver.get(url)
# Прокручиваем страницу до самого низа # Прокручиваем страницу до самого низа
last_height = driver.execute_script("return document.body.scrollHeight") last_height = driver.execute_script("return document.body.scrollHeight")
while True: while True:
@@ -98,5 +93,5 @@ class Pars:
# Получаем HTML-код страницы # Получаем HTML-код страницы
html_content = driver.page_source html_content = driver.page_source
# Сохраняем HTML-код в файл # Сохраняем HTML-код в файл
with open(self.pathToSaveFile, "w", encoding="utf-8") as file: with open(pathToSaveFile, "w", encoding="utf-8") as file:
file.write(html_content) file.write(html_content)