This commit is contained in:
63
main.py
63
main.py
@@ -26,12 +26,26 @@ import uvicorn
|
||||
|
||||
import requests
|
||||
|
||||
# Добавляем импорт psycopg2
|
||||
import psycopg2
|
||||
|
||||
# Локальные импорты
|
||||
# import settings_work as sw
|
||||
import work_parser as wp
|
||||
|
||||
DOCUMENTS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "documents")
|
||||
|
||||
# Создаём соединение с PostgreSQL
|
||||
conn = psycopg2.connect(
|
||||
dbname="parsed_url",
|
||||
user="postgres",
|
||||
password="qwertyqwerty123123",
|
||||
host="45.129.78.228",
|
||||
connect_timeout=100,
|
||||
options="-c statement_timeout=30000" # таймаут запроса 30 сек
|
||||
)
|
||||
conn.autocommit = True
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
"""Управление жизненным циклом приложения"""
|
||||
@@ -386,7 +400,7 @@ def start_pars_all_istochnik(url:str, promt:str):
|
||||
soup = BeautifulSoup(response.text, 'html.parser')
|
||||
base_domain = urlparse(url).netloc
|
||||
|
||||
# links = set()
|
||||
# links = []
|
||||
for a_tag in soup.find_all('a', href=True):
|
||||
href = a_tag['href'].strip()
|
||||
if not href or href.startswith('mailto:') or href.startswith('javascript:'):
|
||||
@@ -402,30 +416,33 @@ def start_pars_all_istochnik(url:str, promt:str):
|
||||
continue
|
||||
|
||||
# Фильтрация по ключевым словам (пример для новостных сайтов)
|
||||
# path_lower = parsed.path.lower()
|
||||
# if any(keyword in path_lower for keyword in ['/news/', 'article', '2023', '2024', '/blog/', '/post/']):
|
||||
|
||||
path_lower = parsed.path.lower()
|
||||
# if any(keyword in path_lower for keyword in ['/news/', 'article', '2026', '2027', '/blog/', '/post/']):
|
||||
print(f"Парсинг {abs_url}")
|
||||
try:
|
||||
article = Article(abs_url)
|
||||
article.download()
|
||||
article.parse()
|
||||
|
||||
if len(article.text) > 200 and article.publish_date:
|
||||
time_text = article.publish_date.strftime("%Y/%m/%d %H:%M:%S")
|
||||
print("URL:", abs_url)
|
||||
print("Заголовок:", article.title)
|
||||
print("Дата публикации:", time_text)
|
||||
print("Текст статьи:", article.text)
|
||||
response_text = gpt_response_message(str(article.text), promt)
|
||||
print(response_text)
|
||||
if response_text:
|
||||
update_bd_and_create_document(response_text=response_text, article_date=time_text, url=abs_url, parsed_at=str(dt.now()), original_text=article.text, other=url)
|
||||
if check_url(abs_url) == False and wp.check_error_url(abs_url):
|
||||
try:
|
||||
article = Article(abs_url)
|
||||
article.download()
|
||||
article.parse()
|
||||
|
||||
if len(article.text) > 200 and article.publish_date:
|
||||
time_text = article.publish_date.strftime("%Y/%m/%d %H:%M:%S")
|
||||
print("URL:", abs_url)
|
||||
print("Заголовок:", article.title)
|
||||
print("Дата публикации:", time_text)
|
||||
print("Текст статьи:", article.text)
|
||||
response_text = gpt_response_message(str(article.text), promt)
|
||||
print(response_text)
|
||||
if response_text:
|
||||
update_bd_and_create_document(response_text=response_text, article_date=time_text, url=abs_url, parsed_at=str(dt.now()), original_text=article.text, other=url)
|
||||
else:
|
||||
wp.add_error_url(url, abs_url)
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||
logger.info(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||
continue # Продолжаем со следующей статьей
|
||||
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||
logger.info(f"Ошибка при обработке статьи {abs_url}: {e}")
|
||||
continue # Продолжаем со следующей статьей
|
||||
|
||||
wp.update_task(task_id, status='completed', finished_at=datetime.utcnow())
|
||||
|
||||
|
||||
Reference in New Issue
Block a user